App-MHFS
view release on metacpan or search on metacpan
share/public_html/static/music_worklet_inprogress/decoder/mhfscl.js view on Meta::CPAN
import Module from './bin/_mhfscl.js'
let MHFSCL = {
'mhfscl' : true,
'ready' : false,
'on' : function(event, cb) {
if(event === 'ready') {
this.on_ready = cb;
}
}
};
const sleep = m => new Promise(r => setTimeout(r, m));
const waitForEvent = (obj, event) => {
return new Promise(function(resolve) {
obj.on(event, function() {
resolve();
});
});
};
class Mutex {
constructor() {
this._locking = Promise.resolve();
this._locked = false;
}
isLocked() {
return this._locked;
}
lock() {
this._locked = true;
let unlockNext;
let willLock = new Promise(resolve => unlockNext = resolve);
willLock.then(() => this._locked = false);
let willUnlock = this._locking.then(() => unlockNext);
this._locking = this._locking.then(() => willLock);
return willUnlock;
}
}
function makeRequest (method, url, start, end, signal) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
const handler = function(){
console.log('ABORT XHR');
xhr.abort();
};
signal.addEventListener('abort', handler);
xhr.open(method, url);
xhr.responseType = 'arraybuffer';
xhr.setRequestHeader('Range', 'bytes='+start+'-'+end);
xhr.onload = function () {
signal.removeEventListener('abort', handler);
if (this.status >= 200 && this.status < 300) {
//console.log('xhr success');
resolve(xhr);
} else {
console.log('xhr fail');
reject({
status: this.status,
statusText: xhr.statusText
});
}
};
xhr.onerror = function () {
console.log('xhr onerror');
signal.removeEventListener('abort', handler);
reject({
( run in 0.809 second using v1.01-cache-2.11-cpan-39bf76dae61 )