增加页面顶部底部按钮和一键下种按钮
// ==UserScript==
// @name javdb auto open
// @namespace websiteEnhancement
// @author jimmly
// @version 2026.9.20
// @description 增加页面顶部底部按钮和一键下种按钮
// @create 2023-9-21
// @include *javdb*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM.getValue
// @grant GM.setValue
// @grant GM_xmlhttpRequest
// @grant GM_log
// @connect nas.knewbeing.com
// @license MIT
// @run-at document-idle
// ==/UserScript==
(async function (loadJQuery) {
loadJQuery(window).then(([$, win]) => {
$.ajaxSetup({
cache: true
});
["https://cdn.jsdelivr.net/npm/[email protected]/jquery.lazyload.min.js",
"https://cdn.jsdelivr.net/gh/sodiray/radash@master/cdn/radash.min.js",
// "https://update.greasyfork.org/scripts/483173/1301961/GM_config_cnjames.js",
// "https://raw.githubusercontent.com/sizzlemctwizzle/GM_config/refs/heads/master/gm_config.js",
"https://cdn.jsdelivr.net/gh/sizzlemctwizzle/GM_config@master/gm_config.js",
"https://update.sleazyfork.org/scripts/476583/common_libs_of_array.js",
// "https://update.sleazyfork.org/scripts/513894/1470715/remove%20ads%20lib.js",
// "https://update.sleazyfork.org/scripts/513894/1627441/remove%20ads%20lib.js",
// "https://update.sleazyfork.org/scripts/513894/1627444/remove%20ads%20lib.js", //with version
"https://update.sleazyfork.org/scripts/513894/remove%20ads%20lib.js" //no version
].reduce((p, url) => p.then(() => new Promise((resolve, reject) => $.getScript(url).done(() => resolve()).fail((er) => { console.log(er) }))), Promise.resolve())
.then(v => remove_adds($, window))
.then(v => {
const config = {
baseUrl: 'http://nas.knewbeing.com:8085',
user: 'admin',
pwd: 'adminadmin',
paused: false
}
const formHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' }
const httpReq = options => new Promise((resolve, reject) => {
GM_xmlhttpRequest({
...options,
timeout: 15_000,
onload: response => {
if (response.status >= 200 && response.status < 300 && response.responseText === 'Ok.') {
resolve(response)
return
}
const responseDetail = response.responseText.trim().slice(0, 500)
reject(new Error(`${options.operation} failed: HTTP ${response.status}${responseDetail ? `: ${responseDetail}` : ''}`))
},
onerror: () => reject(new Error(`${options.operation} failed: Unable to reach qBittorrent Web UI.`)),
ontimeout: () => reject(new Error(`${options.operation} failed: qBittorrent Web UI request timed out.`))
})
})
// 登录
const login = () => httpReq({
operation: 'qBittorrent login',
method: 'POST',
url: `${config.baseUrl}/api/v2/auth/login`,
headers: formHeaders,
data: new URLSearchParams({ username: config.user, password: config.pwd }).toString()
})
// 添加磁力任务
const addTask = magnet => httpReq({
operation: 'Adding torrent',
method: 'POST',
url: `${config.baseUrl}/api/v2/torrents/add`,
headers: formHeaders,
data: new URLSearchParams({ urls: magnet, paused: String(config.paused) }).toString()
})
const sendMagnet = async magnet => {
if (!magnet) {
throw new Error('No magnet link was found on this page.')
}
if (!magnet.startsWith('magnet:?')) {
throw new Error(`The selected link is not a magnet URI: ${magnet}`)
}
await login()
return addTask(magnet)
}
window.sendMagnet = sendMagnet
win.funcDownload = function () {
const torrentUrl = $('div.magnet-name>a[href^="magnet:"]').first().prop('href')
sendMagnet(torrentUrl)
.then(() => {
if (localStorage.getItem("autoclosewindow") == 'Auto') {
window.close()
//window.open("about:blank", "_self").close();
}
})
.catch(err => {
console.error('Failed to add torrent:', err)
alert(`任务添加失败:${err.message}`)
})
}
// win.funcList = function () { }
// win.funcDetail = function () { }
// const reg = /.*thread-(\d+)-.*/
// win.__compareKey = function (cache, curr) {
// if (cache === curr)
// return true
// ///thread-6638382-
// if (reg.test(cache))
// return cache.replace(reg, "$1") === curr
// return false
// }
// win.fixValue = function (value) {
// if (reg.test(value))
// return value.replace(reg, "$1")
// return value
// }
$('table a').removeAttr('style')
win.actionOpened = function (el) {
const item = el.closest('.item')
item.hide()
try {
item.parent().remove(item)
}
catch {
try {
item.remove()
}
catch {
}
}
}
//autoFind(funcIsListPage, cmgId, selector, funcText, $, elBindOpen, unsafeWindow, funcDownload, funcList, funcDetail,actionOpened)
autoFind(() => ['/', '/tags', '/tags/uncensored'].includes(window.location.pathname), 'javdb', '.item a', el => el.attr('title'), $, {}, win)
})
})
})(function (unsafeWindow) {
return new Promise((resolve, reject) => {
let dollar
if (typeof $ != "undefined") {
console.log('no found $')
dollar = $
if ($.noConflict)
$.noConflict()
}
if (typeof jQuery == "undefined" || typeof jQuery.fn == "undefined" || typeof jQuery.fn.lazyload == "undefined") {
console.log('no found jQuery, loading jquery-3.7.1')
let script = document.createElement("script")
script.type = "text/javascript"
script.src = "https://code.jquery.com/jquery-3.7.1.min.js"
script.onerror = function () {
reject(new Error("Failed to load jQuery"))
}
script.addEventListener("load", function () {
jQuery.noConflict()
if (dollar) $ = dollar
resolve([jQuery, unsafeWindow ?? window])
})
document.head.appendChild(script)
}
else {
setTimeout(function () {
// Firefox supports
if (dollar) $ = dollar
resolve([$, unsafeWindow ?? window])
}, 30)
}
})
})