🏠 Home 

Качать с Флибусты файлы с адекватными названиями

Добавляет название книги и автора в название загружаемого файла на flibusta.is. Без транслитерации и всякой фигни. Пока работает только на страницах авторов, которые со всему книгами.


安装此脚本?
// ==UserScript==
// @name        Качать с Флибусты файлы с адекватными названиями
// @namespace   Azazar's Scripts
// @match       *://flibusta.is/a/*
// @match       *://flibusta.is/s/*
// @match       *://flibusta.is/sequence/*
// @match       *://flibustaongezhld6dibs2dps6vm4nvqg2kp7vgowbu76tzopgnhazqd.onion/a/*
// @match       *://flibustaongezhld6dibs2dps6vm4nvqg2kp7vgowbu76tzopgnhazqd.onion/s/*
// @match       *://flibustaongezhld6dibs2dps6vm4nvqg2kp7vgowbu76tzopgnhazqd.onion/sequence/*
// @match       *://flibusta.i2p/a/*
// @match       *://flibusta.i2p/s/*
// @match       *://flibusta.i2p/sequence/*
// @match       *://zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq.b32.i2p/a/*
// @match       *://zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq.b32.i2p/s/*
// @match       *://zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq.b32.i2p/sequence/*
// @grant       GM_setClipboard
// @grant       GM_download
// @version     1.6
// @description Добавляет название книги и автора в название загружаемого файла на flibusta.is. Без транслитерации и всякой фигни. Пока работает только на страницах авторов, которые со всему книгами.
// @license     MIT
// ==/UserScript==
let extMap = {
'fb2': '.fb2.zip',
'epub': '.epub',
'mobi': '.mobi',
};
let author = document.querySelector('h1.title').innerText;
let books = {};
let sequence = null;
if (location.pathname.match(/^\/s\//)) {
sequence = document.querySelector('h1.title').innerText.trim();
}
Array.from(document.querySelectorAll('form[action^="/a/"] a[href], form[action^="/mass/download"] a[href], #main a[href]')).forEach(a => {
let href = a.getAttribute("href");
if (href.startsWith('/s/')) {
sequence = a.innerText.trim();
return;
}
let match = href.match(/^\/b\/(\d+)$/);
if (match) {
let bookId = match[1];
books[bookId] = a.innerText.trim();
if (sequence !== null && a.previousSibling.nodeType === Node.TEXT_NODE) {
match = a.previousSibling.textContent.match(/^ *- (\d+)\. *$/);
if (match) {
let number = match[1];
books[bookId] = `${sequence} ${number}. ${a.innerText.trim()}`;
}
}
return;
}
match = href.match(/^\/b\/(\d+)\/(fb2|epub|mobi|download)$/);
if (match) {
let id = match[1];
let type = match[2];
if (type === 'download') {
if (a.innerText === '(скачать)') {
type = 'fb2';
}
else if (a.innerText.startsWith('(скачать ') && a.innerText.endsWith(')')) {
type = a.innerText.substring(9, a.innerText.length - 1);
}
}
if (books[id]) {
let title = books[id];
if (!/[\.!\?]$/.test(title)) {
title += '.';
}
let ext = extMap[type];
if (ext === undefined) {
ext = type;
}
let filename = `${title} ${author}${ext}`;
a.addEventListener('click', (event) => {
if (type && type !== '') {
event.preventDefault();
let downloadUrl = a.href;
GM_download({
url: downloadUrl,
name: filename,
saveAs: true // optional, to prompt for location
});
}
else {
GM_setClipboard(filename);
}
});
}
}
});