From 4071c4443757aa01f46398b981f1ccc25615c379 Mon Sep 17 00:00:00 2001 From: James Chuong Date: Tue, 13 Aug 2024 08:28:24 -0700 Subject: [PATCH] Fix "Download All" for Safari (#5910) * Fix download all for Safari Added check to use fallback downloader for iOS Added check for safari to use the delayed download function Remove old comment about firefox, as a.click() supported since Firefox 75 (2020) Fixes: #5672 * Change download to always use setTimeout Instead of conditionally using setTimeout based on browser, we should always use it since it sometimes also misses some episodes. * Update formatting --------- Co-authored-by: Bill Thornton --- src/scripts/multiDownload.js | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/scripts/multiDownload.js b/src/scripts/multiDownload.js index ec3db52015..c9f40f56a4 100644 --- a/src/scripts/multiDownload.js +++ b/src/scripts/multiDownload.js @@ -27,19 +27,11 @@ function fallback(urls) { })(); } -function sameDomain(url) { - const a = document.createElement('a'); - a.href = url; - - return window.location.hostname === a.hostname && window.location.protocol === a.protocol; -} - function download(url) { const a = document.createElement('a'); a.download = ''; a.href = url; - // firefox doesn't support `a.click()`... - a.dispatchEvent(new MouseEvent('click')); + a.click(); } export default function (urls) { @@ -47,19 +39,13 @@ export default function (urls) { throw new Error('`urls` required'); } - if (typeof document.createElement('a').download === 'undefined') { + if (typeof document.createElement('a').download === 'undefined' || browser.iOS) { return fallback(urls); } let delay = 0; urls.forEach(function (url) { - // the download init has to be sequential for firefox if the urls are not on the same domain - if (browser.firefox && !sameDomain(url)) { - setTimeout(download.bind(null, url), 100 * ++delay); - return; - } - - download(url); + setTimeout(download.bind(null, url), 100 * ++delay); }); }