const { Worker } = require("worker_threads");
const commands = require("./imageWorkerCommands");
let requestId = -1;
var drawWorker = new Worker(require.resolve("./imageWorker.js"));
drawWorker.on("error", (e) => {
console.log(e);
})
exports.init = function init()
{
return new Promise(async (resolve, reject) => {
drawWorker.postMessage({command:commands.fetchFont});
drawWorker.on("message", ({log, message}) => {
if (log) {
console.log(message);
}
});
function lLog({log}) {
if (!log)
{
drawWorker.off("message",lLog);
resolve();
}
}
drawWorker.on("message", lLog);
});
}
/**
* @typedef ThumbailOption
* @property {number} [width=1920]
* @property {number} [height=1920]
* @property {number} [textSize=1000]
* @property {string} [backgroundColor='rgba(5,5,5,1)']
* @property {string} [textColor='rgba(255,255,255,1)']
* @memberof server.image
*/
/**
* @param {string} text
* @param {ThumbailOption} [option]
* @returns {Promise<string>} Return the path to the file
* @memberof server.image
*/
exports.getThumbail = function getThumbail(text, option = {}) {
return new Promise((resolve, reject) => {
//Using a Worker since 'pureimage' iterates on each pixel when filling
let myRequestId = ++requestId;
function onMessage (message)
{
if (message.requestId != myRequestId) return;
drawWorker.off("message", onMessage);
if (message.err) reject(message.err);
else resolve(message.data);
}
drawWorker.postMessage({
command:commands.generateImage,
requestId: myRequestId,
text,
option
});
drawWorker.on("message", onMessage);
});
}