57 lines
No EOL
1.3 KiB
JavaScript
57 lines
No EOL
1.3 KiB
JavaScript
import ListWalker from '../MessageDistributor/managers/ListWalker';
|
|
|
|
//URL.revokeObjectURL() !!
|
|
function binaryToDataURL(arrayBuffer){
|
|
var blob = new Blob([new Uint8Array(arrayBuffer)], {'type' : 'image/jpeg'});
|
|
return URL.createObjectURL(blob);
|
|
}
|
|
|
|
function prepareImage(width, height, arrayBuffer) {
|
|
const dataURL = binaryToDataURL(arrayBuffer);
|
|
return {
|
|
loadImage: new Promise(resolve => {
|
|
const img = new Image();
|
|
img.onload = function() {
|
|
//URL.revokeObjectURL(this.src);
|
|
resolve(img);
|
|
};
|
|
img.src = dataURL;
|
|
}).then(),
|
|
dataURL,
|
|
};
|
|
}
|
|
|
|
export default class ScreenList {
|
|
_walker = new ListWalker();
|
|
_insertUnique(m) {
|
|
let p = this._walker._list.length;
|
|
while (p > 0 && this._walker._list[ p - 1 ].time > m.time) {
|
|
p--;
|
|
}
|
|
if (p > 0 && this._walker._list[ p - 1 ].time === m.time) {
|
|
return;
|
|
}
|
|
this._walker._list.splice(p, 0, m);
|
|
}
|
|
|
|
moveToLast(time) {
|
|
return this._walker.moveToLast(time);
|
|
}
|
|
|
|
insertScreen(time, width, height, arrayBuffer): void {
|
|
this._insertUnique({
|
|
time,
|
|
width,
|
|
height,
|
|
...prepareImage(width, height, arrayBuffer),
|
|
//image: new ImageData(new Uint8ClampedArray(arrayBuffer), width, height),
|
|
// dataURL: binaryToDataURL(arrayBuffer)
|
|
});
|
|
}
|
|
|
|
clean() {
|
|
this._walker.forEach(m => {
|
|
URL.revokeObjectURL(m.dataURL);
|
|
});
|
|
}
|
|
} |