Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/5d82097a2f5b88ad97ae7e20f677a489.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript==
// @name nyaablue
// @match https://nyaa.si/*
// @grant GM.xmlHttpRequest
// @grant GM.setValue
// @grant GM.getValue
// @version 0.4.0
// @author garret
// @description brings blue to nyaav2 with seadex api
// @namespace garret's bad scripts
// @connect sneedex.moe
// @downloadURL https://update.greasyfork.icu/scripts/441017/nyaablue.user.js
// @updateURL https://update.greasyfork.icu/scripts/441017/nyaablue.meta.js
// ==/UserScript==
function apply_blue(ids) {
if (window.location.href.match("view")) {
set_view_blue(ids)
} else {
set_search_blue(ids)
}
}
function set_view_blue(ids) {
let page_id = window
.location
.href
.match("view/([0-9]+)")[1]
if (ids.has(page_id)) {
document.getElementsByClassName("panel-title")[0].parentNode.parentNode.className = "panel panel-info";
}
}
function set_search_blue(ids) {
let torrentlist = document.getElementsByClassName("torrent-list")[0].tBodies[0].children;
for (const i of torrentlist) {
let id = i
.cells[1]
.children[0]
.attributes
.href
.value
.match("view/([0-9]+)")[1]
if (ids.has(id)) {
i.className = "info"
}
}
}
function main(last_modified, cached_ids) {
console.log("getting data")
GM.xmlHttpRequest({
headers: {
"Accept": "application/json",
"User-Agent": "nyaablue.user.js/" + GM_info.script.version,
"If-Modified-Since": last_modified,
},
method: "GET",
url: "https://sneedex.moe/api/public/nyaa",
onload: function(response) {
let ids = new Set(cached_ids);
if (response.status != "304") {
console.log("has been modified since last check");
let entries = JSON.parse(response.responseText);
ids = new Array()
for (const i of entries) {
for (const j of i.nyaaIDs) {
ids.push(String(j))
}
}
GM.setValue("ids", ids);
ids = new Set(ids)
} else {
console.log("304, it's not changed since last time");
}
if (response.responseHeaders.search(/last\-modified:/i) !== -1){
let last_modified = response.responseHeaders.match(/last\-modified: *(.+)/i)[1];
GM.setValue("last_modified", last_modified);
}
GM.setValue("last_update", Date.now());
apply_blue(ids);
}
})
}
async function check_cache() {
let cached_ids = new Set();
let last_update = 0;
let lm = "";
try {
cached_ids = await GM.getValue("ids");
last_update = await GM.getValue("last_update");
lm = await GM.getValue("last_modified");
if (typeof last_update !== "number") {
throw "probably first run"
}
if (Date.now() > last_update + 3600000) { // not updated in 1 hour
console.log("cache expired")
throw "cache expired";
} else {
console.log("cache isnt expired");
if (cached_ids == undefined) {
console.log("but we dont have any data...");
lm = "";
throw "no data";
}
if (typeof cached_ids !== "object" || cached_ids[1] == undefined) {
console.log("but data is bad");
lm = "";
throw "bad data"
}
console.log("and the data seems fineā¢");
apply_blue(new Set(cached_ids))
}
} catch {
console.log("ooer, handling exception")
main(lm, cached_ids)
}
}
// dark theme "support" (thanks olli)
document.head.insertAdjacentHTML('beforeend', '');
check_cache()