import FileLoader from './utils/FileLoader.js';
import ScreenManager from './data/ScreenManager.js';
/**
* @memberof Public
*/
class Loader
{
/**
* List of blob url for thumbnail
* @type {string[]}
*/
static get defaultThumbnailList() {return Loader._defaultThumbnailList || (Loader._defaultThumbnailList = [])}
/**
*
* @param {number[]} numbers
* @param {Function} onComplete
* @param {Function} onprogress
*/
static preloadDefaultThumbnail(numbers, onComplete, onprogress)
{
console.group("Thumbnail");
console.log(numbers);
console.groupEnd();
let fl = new FileLoader();
for (let i = numbers.length - 1; i >= 0; i--) {
let num = numbers[i];
if (this.defaultThumbnailList[num]) continue;
fl.readAsBlob(`/asset/thumbnail/${num}.png?width=640&height=358&textSize=300`, (url) => {
this.defaultThumbnailList[num] = url;
});
}
fl.oncomplete = () => {
fl.oncomplete = null;
fl.onprogress = null;
console.group("Blob Thumbnail");
console.log(this.defaultThumbnailList);
console.groupEnd();
onComplete();
};
if (onprogress) {
fl.onprogress = (p) => {
onprogress(p);
};
}
fl.start();
}
static start()
{
Loader.loadAnimeList();
Loader.getListDownload();
}
static loadAnimeList()
{
ScreenManager.showLoadingAnime();
let list;
FileLoader.getInstance()._reset()
FileLoader.getInstance().readAsJson("./get/list", (d) => {
list = d;
})
FileLoader.getInstance().oncomplete = () => {
console.log("[FileLoader] Finished loading list");
FileLoader.getInstance().oncomplete = null;
FileLoader.getInstance().onerror = (e) => {
alert(e);
ScreenManager.generateAnimeListHTML();
};
this.onListLoaded(list);
};
FileLoader.getInstance().start();
}
static getEpisodeInfo(animeId, episodeId, callback, loadYtInfo = true)
{
animeId = Number.parseInt(animeId);
episodeId = Number.parseInt(episodeId);
FileLoader.getInstance()._reset()
.readAsJson(`./get/episode/info?animeId=${animeId}&episodeId=${episodeId}&loadYtInfo=${loadYtInfo}`, (data) => {
console.log(data);
callback(data);
})
.start();
}
/**
*
* @param {number} animeId
* @param {number} episodeId
*/
static loadLocalEpisode(animeId, episodeId, listIsEpisodeLocal)
{
animeId = Number.parseInt(animeId);
episodeId = Number.parseInt(episodeId);
ScreenManager.showVideo(`./episode/${animeId}/${episodeId}`, animeId, episodeId, listIsEpisodeLocal);
}
static download(animeId, episodeId, videoPlayerId, url, format = null)
{
return new Promise((resolve, reject) => {
//location.host = hostname:port;
let reqUrl = new URL(`${window.location.protocol}//${window.location.host}/get/episode/download`);
if (format != null) reqUrl.searchParams.set("format", JSON.stringify(format));
reqUrl.searchParams.set("animeId", animeId);
reqUrl.searchParams.set("episodeId", episodeId);
reqUrl.searchParams.set("videoPlayerId", videoPlayerId);
reqUrl.searchParams.set("url", url);
let loader = new FileLoader().readAsJson(reqUrl.toString(), (json) => {
loader._destroy();
resolve(json);
});
loader.onparseerror = loader.onerror = (e) =>
{
reject(e);
}
loader.start();
});
}
static getListDownload()
{
let loader = new FileLoader().readAsJson("./get/list/download", (json) => {
ScreenManager.downloadList(json);
});
loader.oncomplete = () => {
setTimeout(
() =>
{
Loader.getListDownload();
loader._destroy();
},
2000
);
};
loader.onparseerror = loader.onerror = (e) =>
{
console.log(e);
setTimeout(
() => {
Loader.getListDownload();
loader._destroy();
},
2000
);
};
loader.start();
}
static onListLoaded(data)
{
ScreenManager.initAnimes(data);
}
}
export default Loader;