您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Upload torrents to the same group using an existing torrent's details
- // ==UserScript==
- // @name GGn Reuploader
- // @namespace none
- // @version 2
- // @description Upload torrents to the same group using an existing torrent's details
- // @author dullfool68, ingts
- // @match https://gazellegames.net/torrents.php?id=*
- // @match https://gazellegames.net/torrents.php?action=edit&id=*
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_deleteValue
- // @grant GM_openInTab
- // @require
- // ==/UserScript==
- if (window.location.pathname.includes("upload")) {
- const formData = JSON.parse(
- GM_getValue("data", null),
- )
- if (formData) {
- GM_deleteValue("data")
- const form = document.getElementById('upload_table')
- form.addEventListener('submit', () => {
- GM_setValue("new", 1)
- })
- for (const [key, value] of Object.entries(formData)) {
- if (key === 'scan') {
- const radio = document.getElementById(`${value === '0' ? 'digital' : 'scan'}`)
- radio.checked = true
- radio.dispatchEvent(new Event('click'))
- continue
- }
- if (!value) continue
- const inputElement = form.querySelector(`[name=${key}]`)
- if (inputElement.type === "checkbox") {
- inputElement.checked = true
- } else {
- inputElement.value = value
- }
- if (inputElement.onclick) inputElement.dispatchEvent(new Event('click'))
- if (inputElement.onchange) inputElement.dispatchEvent(new Event('change'))
- }
- document.getElementById('release_title').dispatchEvent(new Event('blur'))
- }
- } else if (window.location.pathname.includes("torrent")) {
- $("tr.group_torrent > td > span > a:last-child").after(function () {
- const torrentId = /id=([0-9]+)/.exec($(this).attr("href"))[1]
- const upload = $("<a/>", {
- text: "UL",
- click: () => handleUploadClick(torrentId),
- })
- return [document.createTextNode(" | "), upload]
- })
- if (GM_getValue("new", null)) {
- document.querySelector(`#torrent${GM_getValue("torrentId")}`).style.backgroundColor = '#70474e'
- }
- GM_deleteValue("new")
- GM_deleteValue("torrentId")
- }
- async function getTorrentFormData(torrentId) {
- const text = await fetch(
- `https://gazellegames.net/torrents.php?action=edit&id=${torrentId}`,
- ).then((response) => response.text())
- const doc = new DOMParser().parseFromString(text, "text/html")
- const formElement = doc.querySelector("form#upload_table")
- if (!formElement) {
- return null
- }
- const formData = new FormData(formElement)
- if (doc.getElementById('digital')?.checked) {
- formData.set('scan', '0')
- formData.delete('scan_dpi')
- }
- else if (doc.getElementById('scan')?.checked) {
- formData.set('scan', '1')
- }
- return formData
- }
- async function handleUploadClick(torrentId) {
- GM_setValue("torrentId", torrentId)
- const formData = await getTorrentFormData(torrentId)
- if (!formData) {
- console.error("Form Data was null.")
- return
- }
- const FORM_KEYS = [
- "remaster",
- "release_title",
- "miscellaneous",
- "gamedox",
- "gamedoxvers",
- "scan",
- "scan_dpi",
- "other_dpi",
- "isbn",
- "region",
- "language",
- // "ripsrc", scene/other auto selected once title is set
- "remaster_year",
- "remaster_title",
- "format",
- "release_desc",
- "scan_ocr",
- "issue", // e-book
- "bitrate", // OST
- "other_bitrate", // OST
- ]
- GM_setValue(
- "data",
- JSON.stringify(
- FORM_KEYS.reduce((acc, cur) => {
- acc[cur] = formData.get(cur)
- return acc
- }, {}),
- ),
- )
- GM_openInTab(`https://gazellegames.net/upload.php?groupid=${new URL(location.href).searchParams.get('id')}`, {active: true})
- }