Last active
September 7, 2024 00:09
-
-
Save the-codinator/63e166af37d2df6b5515a2384b178158 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Downloader for SubsPlease. Convert to bookmarklet using https://mrcoles.com/bookmarklet/ */ | |
/* Note: Use with Firefox coz Chrome restricts external protocol execution without user interaction so only 1 link gets clicked / pages open */ | |
/* Based on https://github.com/the-codinator/anime-downloader-bookmarklet */ | |
if (!window.location.href.startsWith('https://subsplease.org/shows/')) throw Error('Not on SubsPlease'); | |
console.log('Executing Anime Downloader for SubsPlease!'); | |
if (typeof codiLinkType == 'undefined') codiLinkType = 'Magnet'; | |
if (typeof codiVideoQuality == 'undefined') codiVideoQuality = '1080p'; | |
if (typeof codiFirstEpisodeNumber == 'undefined') codiFirstEpisodeNumber = 0; | |
if (typeof codiLastEpisodeNumber == 'undefined') codiLastEpisodeNumber = 10_000; | |
if (typeof codiClickIntervalMs == 'undefined') codiClickIntervalMs = 500; | |
const codiGetLinkType = linkElement => linkElement.querySelector('.badge')?.textContent; | |
const codiGetVideoQuality = linkElement => { for (let curr = linkElement; curr; curr = curr.previousElementSibling) if (curr.classList.contains('links')) return curr.textContent }; | |
const codiGetEpisodeNumber = linkElement => parseFloat(linkElement.closest('.show-release-item')?.querySelector('.episode-title')?.textContent?.match(/ (\d+(?:\.\d+)?)(?:v\d+)?$/g)?.pop()); | |
const codiLinks = Array.from(document.querySelectorAll('.show-release-item .download-links a')) | |
.filter(link => codiGetLinkType(link) == codiLinkType) | |
.filter(link => codiGetVideoQuality(link) == codiVideoQuality) | |
.filter(link => codiFirstEpisodeNumber <= codiGetEpisodeNumber(link) && codiGetEpisodeNumber(link) <= codiLastEpisodeNumber) | |
.toSorted((link1, link2) => codiGetEpisodeNumber(link1) - codiGetEpisodeNumber(link2)); | |
console.log('Episode Count: ' + codiLinks.length, {codiLinkType, codiVideoQuality, codiFirstEpisodeNumber, codiLastEpisodeNumber}); | |
let codiLinksCopy = codiLinks.toReversed(); | |
const codiHandler = window.setInterval(() => { | |
if (codiLinksCopy.length == 0) { window.clearInterval(codiHandler); return } | |
const link = codiLinksCopy.pop(); | |
console.log('Opening Episode: ' + codiGetEpisodeNumber(link)); | |
/* window.open(.href, '_blank'); */ | |
link.click(); | |
}, codiClickIntervalMs); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment