/**
* @namespace server
*/
/**
* @namespace https
* @memberof server
*/
/**
* @namespace global
* @memberof server
*/
/**
* @namespace image
* @memberof server
*/
/**
* @namespace data
* @memberof server
*/
/**
* @namespace config
* @memberof server.data
*/
/**
* @namespace public
* @memberof server.data
*/
const inspector = require("inspector");
try {
inspector.waitForDebugger();
} catch (_) {}
const JSON_CONFIG = "config.json";
const JSON_ANIME = "index.json";
const ANIME_FOLDER = "episode";
const path = require("path");
const fs = require("fs");
const Server = require("./src/server");
const imageWriter = require("./src/image/imageWriter");
const {createLogFile} = require("./src/global");
createLogFile();
const dataManager = require("./src/dataManager");
const JsonObject = dataManager.JsonObject;
const VideoPlayer = dataManager.VideoPlayer;
const YoutubePlayer = dataManager.YoutubePlayer;
const Anime = dataManager.Anime;
/**
* @memberof server.data.config
* @typedef Config
* @property {number} port
* @property {boolean} keepThumbnails
* @property {dataManager.VideoPlayerConfig[]} videoPlayers
*/
/**
* @ignore
*/
var configLoader = new JsonObject(path.join(__dirname, JSON_CONFIG));
//Init imageWriter
let tempFileRemove = new Promise((resolve, reject) => {
console.log("Clearing temp...");
if (fs.existsSync(__tempFolder))
{
let files = fs.readdirSync(__tempFolder);
for (let i = files.length - 1; i >= 0; i--) {
let file = files[i];
let filePath = path.join(__tempFolder, file);
fs.unlinkSync(filePath);
}
}
else
{
fs.mkdir(__tempFolder);
}
console.log("Clearing temp... DONE !");
console.newLine();
resolve();
});
tempFileRemove.then(
() => imageWriter.init()
)
.then(
//Loading configs
() => configLoader.load()
)
.then(
() => {
/**
* @type {Config}
*/
var value = configLoader.value;
console.log(configLoader);
//Get all video players
for (let i = value.videoPlayers.length - 1; i >= 0; i--) {
let lElement = value.videoPlayers[i];
if (lElement.isNatif || lElement.isYoutube)
{
new YoutubePlayer(lElement);
continue;
}
new VideoPlayer(lElement);
}
}
)
.then(
() => new Promise(async (resolve, reject) => {
console.log("Loaded "+JSON_CONFIG);
console.dir(configLoader.value);
let episodeFolder = path.join(__dirname, ANIME_FOLDER);
//Load animes and episodes
fs.readdir(episodeFolder, async(err, files) => {
for (let i = files.length - 1; i >= 0; i--) {
let lElement = files[i];
//Load the anime config
var animeFolderPath = path.join(episodeFolder, lElement);
var animeLoader = new JsonObject(path.join(animeFolderPath, JSON_ANIME));
try {
await animeLoader.load();
console.dir(animeLoader.value);
new Anime(animeLoader, animeFolderPath);
}
catch(e)
{
console.log(e);
}
}
resolve();
});
})
)
.then(
() => {
console.newLine();
console.log(`${Anime.list.length} animes has been loaded`);
console.newLine();
console.log("Launching server......");
Server(configLoader.value);
}
)
.catch(
(e) => {
console.error(e);
throw "Can't launch the server";
}
);