mirror of
https://github.com/captbaritone/webamp.git
synced 2026-01-23 18:25:30 +00:00
48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
export async function genArrayBufferFromFileReference(fileReference) {
|
|
return new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
resolve(e.target.result);
|
|
};
|
|
reader.onerror = function(e) {
|
|
reject(e);
|
|
};
|
|
|
|
reader.readAsArrayBuffer(fileReference);
|
|
});
|
|
}
|
|
|
|
export async function genArrayBufferFromUrl(url) {
|
|
return new Promise((resolve, reject) => {
|
|
const oReq = new XMLHttpRequest();
|
|
oReq.open("GET", url, true);
|
|
oReq.responseType = "arraybuffer";
|
|
|
|
oReq.onload = () => {
|
|
const arrayBuffer = oReq.response; // Note: not oReq.responseText
|
|
resolve(arrayBuffer);
|
|
};
|
|
oReq.onerror = reject;
|
|
|
|
oReq.send(null);
|
|
});
|
|
}
|
|
|
|
export async function promptForFileReferences() {
|
|
return new Promise(resolve => {
|
|
// Does this represent a memory leak somehow?
|
|
// Can this fail? Do we ever reject?
|
|
const fileInput = document.createElement("input");
|
|
fileInput.type = "file";
|
|
fileInput.multiple = true;
|
|
// Not entirely sure why this is needed, since the input
|
|
// was just created, but somehow this helps prevent change
|
|
// events from getting swallowed.
|
|
// https://stackoverflow.com/a/12102992/1263117
|
|
fileInput.value = null;
|
|
fileInput.addEventListener("change", e => {
|
|
resolve(e.target.files);
|
|
});
|
|
fileInput.click();
|
|
});
|
|
}
|