diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-05-15 18:15:33 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-05-15 18:15:54 -0300 |
commit | e5690754edf56cbbb538855448fdb1f507c077f9 (patch) | |
tree | 031659b11d0f84c9e605a9064b9e7a3e27698d44 /src/static/client4.js | |
parent | 098ab304d2da5f4b99c746ef6a0ee8f1e947adc0 (diff) |
client: move fetchWithProgress into xhr-util importable file
Diffstat (limited to 'src/static/client4.js')
-rw-r--r-- | src/static/client4.js | 64 |
1 files changed, 1 insertions, 63 deletions
diff --git a/src/static/client4.js b/src/static/client4.js index b7b01011..729836b5 100644 --- a/src/static/client4.js +++ b/src/static/client4.js @@ -7,6 +7,7 @@ import {accumulateSum, empty, filterMultipleArrays, stitchArrays} from '../util/sugar.js'; +import {fetchWithProgress} from './xhr-util.js'; const clientInfo = window.hsmusicClientInfo = Object.create(null); @@ -2859,69 +2860,6 @@ function updateFileSizeInformation(fileSize) { addImageOverlayClickHandlers(); -/** - * This fetch function is adapted from a `loadImage` function - * credited to Parziphal, Feb 13, 2017. - * https://stackoverflow.com/a/42196770 - * - * The callback is generally run with the loading progress as a decimal 0-1. - * However, if it's not possible to compute the progress ration (which might - * only become apparent after a progress amount *has* been sent!), - * the callback will be run with the value -1. - * - * The return promise resolves to a manually instantiated Response object - * which generally behaves the same as a normal fetch response; access headers, - * text, blob, arrayBuffer as usual. Accordingly, non-200 responses do *not* - * reject the prmoise, so be sure to check the response status yourself. - */ -function fetchWithProgress(url, progressCallback) { - return new Promise(resolve => { - const xhr = new XMLHttpRequest(); - let notifiedNotComputable = false; - - xhr.open('GET', url, true); - xhr.responseType = 'arraybuffer'; - - xhr.onprogress = event => { - if (notifiedNotComputable) { - return; - } - - if (!event.lengthComputable) { - notifiedNotComputable = true; - progressCallback(-1); - return; - } - - progressCallback(event.loaded / event.total); - }; - - xhr.onloadend = () => { - const body = xhr.response; - - const options = { - status: xhr.status, - headers: - parseResponseHeaders(xhr.getAllResponseHeaders()), - }; - - resolve(new Response(body, options)); - }; - - xhr.send(); - }); - - function parseResponseHeaders(headers) { - return ( - Object.fromEntries( - headers - .trim() - .split(/[\r\n]+/) - .map(line => line.match(/(.+?):\s*(.+)/)) - .map(match => [match[1], match[2]]))); - } -} - // "Additional names" box --------------------------------- const additionalNamesBoxInfo = initInfo('additionalNamesBox', { |