// ==UserScript==
// @name javdb auto open
// @namespace websiteEnhancement
// @author jimmly
// @version 2024.8.1
// @description 增加页面顶部底部按钮和一键下种按钮
// @create 2023-9-21
// @include *javdb*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM.getValue
// @grant GM.setValue
// @license MIT
// @run-at document-idle
// ==/UserScript==
/**
* source of GM_config https://raw.githubusercontent.com/niubilityfrontend/GM_config/v20230928/gm_config.js
* @typedef { import('jquery') } $
* @typedef { import('jQuery') } jQuery
*/;
; (async function (loadJS) {
loadJS("https://update.greasyfork.org/scripts/483173/GM_config_cnjames.js")
.then(v => loadJS("https://update.sleazyfork.org/scripts/476583/common_libs_of_array.js"))
.then(v => {
withJQuery(function ($, win) {
let w = 40, h = 40;
addStyle(`
a:link{color:green;}
a:hover{color:red;}
a:active{color:yellow;}
a:visited{color:orange;}
.btn1 {
opacity:0.8;-moz-transition-duration:0.2s;-webkit-transition-duration:0.2s;
padding:1px; margin-top:1px;
font-size: 10; text-align: center; vertical-align: middle; line-height:${h}px;
border-radius:5px 5px 5px 5px;cursor:pointer; left:0px;z-index:9999;
background:white;
width:${w}px;height:${h}px;
}
`);
let container = $(document.createElement('div')).css({
'cssText': `position:fixed;top:15%;width:${w}px;height:${h * 7}px;left:0px;z-index:9999`
});
// 替换这些值为你的实际设置
const baseUrl = 'https://192.168.8.249:30024'; // 例如 http://localhost:8080
const username = 'admin';
const password = 'adminadmin';
// 登录到qBittorrent Web UI
async function login() {
const response = await fetch(`${baseUrl}/api/v2/auth/login`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`
});
if (response.ok) {
console.log('Logged in successfully.');
} else {
console.error('Failed to log in.');
}
return response
}
// 添加新的torrent下载任务
async function addTorrent(url) {
const response = await fetch(`${baseUrl}/api/v2/torrents/add`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: `urls=${encodeURIComponent(url)}`
});
if (response.ok) {
console.log('added successfully.');
} else {
console.log('Failed to add.', response.body);
}
return response
}
// 使用
if (window.location.href.indexOf('tags') == -1) {
//下载按钮
let downloadBtn = $(document.createElement('div')).text('下載').appendTo(container)
.click(function () {
(async () => {
login()
.then(v => {
let torrentUrl = $('div.magnet-name.column.is-four-fifths>a').first().prop('href')
return addTorrent(torrentUrl)
})
.then(res => {
if (res.ok) {
win.close();
}
else {
console.log('Failed to add.', response);
alert('add error')
}
}).catch(err => console.log(err))
})();
});
console.log('win.__t', win.__t)
let //close
closeBtn = $(document.createElement('div')).text('關閉').appendTo(container)
.click(function () {
win.open("about:blank", "_self").close();
}),
//加速
fastBtn = $(document.createElement('div')).text('加速').attr('title', '加速').appendTo(container)
.click(function () {
if (win.__wait > 5) {
win.__wait = win.__wait / 1.5
} else {
win.__wait = 5
}
win.___reset()
}),
switchBtn = $(document.createElement('div')).text(!win.__t ? '啓' : '停').appendTo(container)
.click(function () {
if (!win.__t) {
win.__startTimer();
} else {
win.__stopTimer()
}
}),
slowBtn = $(document.createElement('div')).text('減速').attr('title', '減速').appendTo(container)
.click(function () {
win.__wait *= 1.5
win.___reset()
})
$(document).keydown(function (event) {
let e = event || win.event;
let k = e.keyCode || e.which;
if (k === 16) {
// isCtrl = true;
switchBtn.click()
} else if (k === 38) { //up
event.stopPropagation()
slowBtn.click()
} else if (k === 40) {//down
event.stopPropagation()
//fastBtn.click()
}
})
$(document).mousedown(function (e) {
if (e.which == 2) {
downloadBtn.click();
}
})
$(win).blur(function () {
win.__stopTimer()
}).focus(function () {
win.__startTimer();
})
win.__wait = 900
win.__step = 100;
win.__startTimer = function () {
win.______h = $(document).scrollTop() + win.__step;
if (win.______h >= $(document).height() - $(win).height()) {
win.__stopTimer()
// win.__t = setTimeout(win.__startTimer, 30000)
} else {
$(document).scrollTop(win.______h);
win.__t = setTimeout(win.__startTimer, win.__wait)
}
win.__syncState()
};
win.__stopTimer = function () {
clearTimeout(win.__t)
win.__t = 0
win.__syncState()
}
win.___reset = function () {
win.__stopTimer()
win.__startTimer();
win.__syncState()
}
win.__syncState = function () {
fastBtn.text(`${Math.floor(win.__wait)}`)
slowBtn.text(`${Math.floor(win.__wait)}`)
switchBtn.text(win.__t ? '停' : '啓')
}
}
else {
$('tr').hover(
function () {
$(this).find('*').css("background-color", "#9AAAC7")
}, function () {
$(this).find('*').css("background-color", '');
});
}
//最顶按钮
let
toTopBtn = $(document.createElement('div')).text('Top').appendTo(container)
.click(function () {
win.scrollTo(0, 0);
}), //最低按钮
toBottomBtn = $(document.createElement('div')).text('Bottom').appendTo(container)
.click(function () {
win.scrollTo(0, document.body.scrollHeight);
}),
setBtn = $(document.createElement('div')).attr('id', 'btnSet').text('設置').appendTo(container)
.click(function () {
win.gmc.open();
});
container
.find('div')
.addClass('btn1')
.hover(function (e) {
let o = $(this)
o.data('old_opacity', o.css('opacity'))
.data('old_border', o.css('border'))
o.css('opacity', 1).css('border', '1px solid black')
}, function (e) {
let o = $(this)
o.css('opacity', o.data('old_opacity')).css('border', o.data('old_border'))
})
container.appendTo('body');
autoFind(() => window.location.href.indexOf('tags') > -1, 'javdb', '.item a', el => el.attr('title'), $, setBtn);
})
})
})(function (FILE_URL, async = true) {
return new Promise((resolve, reject) => {
let scriptEle = document.createElement("script");
scriptEle.setAttribute("src", FILE_URL);
scriptEle.setAttribute("type", "text/javascript");
scriptEle.setAttribute("async", async);
// success event
scriptEle.addEventListener("load", () => {
resolve(FILE_URL)
});
// error event
scriptEle.addEventListener("error", (ev) => {
reject(ev);
});
if (document.currentScript)
document.currentScript.insertBefore(scriptEle)
else
(document.head || document.getElementsByTagName('head')[0]).appendChild(scriptEle);
})
});