|
1 | 1 | // ==UserScript== |
2 | 2 | // @name AniLINK - Episode Link Extractor |
3 | 3 | // @namespace https://greasyfork.org/en/users/781076-jery-js |
4 | | -// @version 6.21.2 |
| 4 | +// @version 6.21.3 |
5 | 5 | // @description Stream or download your favorite anime series effortlessly with AniLINK! Unlock the power to play any anime series directly in your preferred video player or download entire seasons in a single click using popular download managers like IDM. AniLINK generates direct download links for all episodes, conveniently sorted by quality. Elevate your anime-watching experience now! |
6 | 6 | // @icon https://www.google.com/s2/favicons?domain=animepahe.ru |
7 | 7 | // @author Jery |
@@ -825,7 +825,7 @@ const Extractors = { |
825 | 825 | const retryAfter = res.headers.get('Retry-After'); // Rate limit Policy: 10 requests per minute |
826 | 826 | if (retryAfter) { |
827 | 827 | const hhmmss = new Date(new Date().getTime() + parseInt(retryAfter) * 1000).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true }); |
828 | | - showToast(`Rate limited by megacloud.blog, retrying in ${retryAfter} seconds (at ${hhmmss})...`, parseInt(retryAfter) * 1000); |
| 828 | + showToast(`Rate limited by megacloud.blog, retrying in ${retryAfter} secs (at ${hhmmss})...`, parseInt(retryAfter) * 1000); |
829 | 829 | return await new Promise(res => setTimeout(res, 500 + parseInt(retryAfter) * 1000)).then(() => Extractors['megacloud.blog'](embed, referer)); // recursive retry |
830 | 830 | } |
831 | 831 | const html = await res.text(); |
@@ -1119,6 +1119,7 @@ async function extractEpisodes() { |
1119 | 1119 | <button type="button" class="anlink-play-all">Play with MPV</button> |
1120 | 1120 | `; |
1121 | 1121 | statusBarHeader.appendChild(headerButtons); |
| 1122 | + attachHeaderButtons(); |
1122 | 1123 |
|
1123 | 1124 | // start interval to update status text |
1124 | 1125 | const statusInterval = setInterval(() => { |
@@ -1382,13 +1383,13 @@ async function extractEpisodes() { |
1382 | 1383 | } |
1383 | 1384 |
|
1384 | 1385 | // Attach header button handlers |
1385 | | - (function attachHeaderButtons() { |
| 1386 | + function attachHeaderButtons() { |
1386 | 1387 | const exportBtn = linksContainer.querySelector('.anlink-export-all'); |
1387 | 1388 | const playBtn = linksContainer.querySelector('.anlink-play-all'); |
1388 | 1389 |
|
1389 | 1390 | exportBtn.addEventListener('click', () => onExportAll(exportBtn)); |
1390 | 1391 | playBtn.addEventListener('click', () => onPlayAll(playBtn)); |
1391 | | - })(); |
| 1392 | + }; |
1392 | 1393 |
|
1393 | 1394 | // Helper to get all selected episodes across all qualities |
1394 | 1395 | function getAllSelectedEpisodes() { |
|
0 commit comments