// ==UserScript== // @name GGn Release Title Filler // @version 6 // @description Set release title from torrent file // @author ingts // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_addStyle // @match https://gazellegames.net/upload.php* // @namespace https://greasyfork.org/users/1141417 // @downloadURL https://update.greasyfork.icu/scripts/505737/GGn%20Release%20Title%20Filler.user.js // @updateURL https://update.greasyfork.icu/scripts/505737/GGn%20Release%20Title%20Filler.meta.js // ==/UserScript== const autofill = true const fileInput = document.getElementById('file') const aliasInput = document.getElementById('aliases') if (aliasInput.value) { GM_addStyle(` .aliases1 { position: relative; display: none; top: 25px; right: 11%; margin-bottom: 15px; padding-top: 10px } #fill_title:hover ~ .aliases1 {display: inline-block;} .aliases1:hover {display: inline-block;} `) fileInput.insertAdjacentHTML('afterend', `
`) const aliasCtn = document.getElementById('alias-ctn') const aliases = aliasInput.value.split(', ') .filter(al => !/[A-Z]{2}\d{4,}/.test(al) && /[a-zA-Z]/.test(al)) // remove DLsite codes and those without latin characters aliases.forEach(al => { const button = document.createElement('button') button.type = 'button' button.textContent = al button.onclick = () => setTitle(false, al) aliasCtn.append(button) }) GM_deleteValue("aliases") } let filename fileInput.onchange = () => { filename = fileInput.files[0].name if (autofill && document.getElementById('categories').value === 'Games') { if (!/\s/.test(filename) && filename.includes('-')) setTitle(true) // likely scene else setTitle(false) } } addButton(true) addButton() function addButton(exact) { const button = document.createElement('button') button.type = 'button' button.textContent = `Fill ${exact ? 'exact' : 'title'}` button.onclick = () => setTitle(exact) button.style.marginLeft = '6px' if (!exact) button.id = 'fill_title' fileInput.after(button) } const titleInput = document.getElementById('release_title') function setTitle(exact, alias) { const exts = ["flac", "mp3", "pdf", "epub", "mobi", "cbz", "cbr", "cb7", "azw3","zip", "7z", "rar", "iso", "sh", "dmg", "appimage", "arc", "nsp", "xci", "exe", "apk", "ipa"] const noExt = new RegExp(`(.*?)\\.?(?:${exts.join('|')}|tar.(?:gz|xz|zst|bz2))?.torrent`, 'i').exec(filename)?.[1] ?? '' if (exact) { titleInput.value = noExt } else { const groupTitle = document.getElementById('title').value const s = /v\d/.test(noExt) ? "v\\d" : "(?<=\\s)\\d+(?:\\.\\d)*$" // so that a number in the title isn't taken as the version let version = new RegExp(`(?:[(\\[].*)?${s}.*`).exec(noExt)?.[0] // optional bracket before version ?? /[(\[].*[\])]/.exec(noExt)?.[0] // bracket only for e.g. (Build 123456) ?? '' if (/^\d/.test(version)) { version = `v${version}` } titleInput.value = `${alias ? alias : groupTitle} ${version}` titleInput.dispatchEvent(new Event('blur')) } }