From 2563fc19cad5d772067578771b887133b6ce3fad Mon Sep 17 00:00:00 2001 From: Xziy Date: Fri, 21 Jul 2023 07:15:33 +0300 Subject: [PATCH] fix new addteters after run --- adapters/index.d.ts | 1 + adapters/index.js | 9 +- adapters/index.ts | 10 +- adapters/mediafile/MediaFileAdapter.d.ts | 2 +- adapters/mediafile/MediaFileAdapter.js | 3 +- adapters/mediafile/MediaFileAdapter.ts | 5 +- adapters/mediafile/default/local.d.ts | 5 +- adapters/mediafile/default/local.js | 123 ++++++++++++------ adapters/mediafile/default/local.ts | 152 +++++++++++++++-------- adapters/rms/RMSAdapter.js | 14 ++- adapters/rms/RMSAdapter.ts | 16 ++- models/Dish.js | 1 + models/Dish.ts | 1 + models/Group.js | 1 + models/Group.ts | 1 + models/Settings.js | 2 +- models/Settings.ts | 2 +- 17 files changed, 232 insertions(+), 116 deletions(-) diff --git a/adapters/index.d.ts b/adapters/index.d.ts index 92985a1e..a8faaa81 100644 --- a/adapters/index.d.ts +++ b/adapters/index.d.ts @@ -40,6 +40,7 @@ export declare class OTP { export declare class Adapter { private static instanceRMS; private static instanceMF; + static WEBRESTO_MODULES_PATH: string; static getDiscountAdapter(adapterName?: string, initParams?: { [key: string]: string | number | boolean; }): Promise; diff --git a/adapters/index.js b/adapters/index.js index b8841087..421f47f5 100644 --- a/adapters/index.js +++ b/adapters/index.js @@ -144,7 +144,7 @@ class Adapter { if (!adapterName) { return discountAdapter_1.DiscountAdapter.getInstance(); } - let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; + let adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-discount-adapter"; try { const adapter = require(adapterLocation); @@ -164,7 +164,7 @@ class Adapter { if (!defaultAdapterName) throw 'BonusProgramAdapter is not set '; } - let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; + let adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-bonus-adapter"; try { const adapter = require(adapterLocation); @@ -201,7 +201,7 @@ class Adapter { if (!adapterName) throw 'RMS adapter is not installed'; } - let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-rms-adapter"; + let adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-rms-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-rms-adapter"; try { const adapterModule = require(adapterLocation); @@ -243,7 +243,7 @@ class Adapter { } } if (!adapterLocation) { - adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-mediafile-adapter"; + adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-mediafile-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-mediafile-adapter"; } try { @@ -257,4 +257,5 @@ class Adapter { } } } +Adapter.WEBRESTO_MODULES_PATH = process.env.WEBRESTO_MODULES_PATH === undefined ? "@webresto" : process.env.WEBRESTO_MODULES_PATH; exports.Adapter = Adapter; diff --git a/adapters/index.ts b/adapters/index.ts index b979e215..b705ea59 100644 --- a/adapters/index.ts +++ b/adapters/index.ts @@ -162,7 +162,7 @@ export class Adapter { // Singletons private static instanceRMS: RMSAdapter; private static instanceMF: MediaFileAdapter; - + public static WEBRESTO_MODULES_PATH = process.env.WEBRESTO_MODULES_PATH === undefined ? "@webresto" : process.env.WEBRESTO_MODULES_PATH; public static async getDiscountAdapter(adapterName?: string, initParams?: {[key: string]:string | number | boolean}): Promise { if(!adapterName) { @@ -173,7 +173,7 @@ export class Adapter { return DiscountAdapter.getInstance(); } - let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; + let adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-discount-adapter"; try { @@ -194,7 +194,7 @@ export class Adapter { if (!defaultAdapterName) throw 'BonusProgramAdapter is not set ' } - let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; + let adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-discount-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-bonus-adapter"; try { @@ -235,7 +235,7 @@ export class Adapter { } - let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-rms-adapter"; + let adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-rms-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-rms-adapter"; try { @@ -281,7 +281,7 @@ export class Adapter { } if (!adapterLocation) { - adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-mediafile-adapter"; + adapterLocation = this.WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-mediafile-adapter"; adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-mediafile-adapter"; } diff --git a/adapters/mediafile/MediaFileAdapter.d.ts b/adapters/mediafile/MediaFileAdapter.d.ts index 55ace075..f2937903 100644 --- a/adapters/mediafile/MediaFileAdapter.d.ts +++ b/adapters/mediafile/MediaFileAdapter.d.ts @@ -19,7 +19,7 @@ export default abstract class MediaFileAdapter { */ wait(): Promise; toDownload(url: string, target: string, type: MediaFileTypes, force?: boolean): Promise; - abstract load(url: string, type: MediaFileTypes, config: BaseConfigProperty): Promise<{ + abstract process(url: string, type: MediaFileTypes, config: BaseConfigProperty): Promise<{ origin: string; small: string; large: string; diff --git a/adapters/mediafile/MediaFileAdapter.js b/adapters/mediafile/MediaFileAdapter.js index c975dc7a..490a47b8 100644 --- a/adapters/mediafile/MediaFileAdapter.js +++ b/adapters/mediafile/MediaFileAdapter.js @@ -21,6 +21,7 @@ class MediaFileAdapter { } async toDownload(url, target, type, force = false) { await this.wait(); + sails.log.silly(`Adapter > Mediafile > toDownload: ${url}`); let imageId = (0, uuid_1.v5)(url, this.UUID_NAMESPACE); let mediaFile = await MediaFile.findOne({ id: imageId }); let loadConfig; @@ -34,7 +35,7 @@ class MediaFileAdapter { }; switch (type) { case "image": - mediaFile.images = this.load(url, "image", loadConfig); + mediaFile.images = this.process(url, "image", loadConfig); break; case "video": // mediaFile.video = ??? diff --git a/adapters/mediafile/MediaFileAdapter.ts b/adapters/mediafile/MediaFileAdapter.ts index 917e7e06..107f98fe 100644 --- a/adapters/mediafile/MediaFileAdapter.ts +++ b/adapters/mediafile/MediaFileAdapter.ts @@ -39,6 +39,7 @@ export default abstract class MediaFileAdapter { public async toDownload(url: string, target: string, type: MediaFileTypes, force: boolean = false): Promise { await this.wait() + sails.log.silly(`Adapter > Mediafile > toDownload: ${url}`) let imageId = uuidv5(url, this.UUID_NAMESPACE); let mediaFile = await MediaFile.findOne({ id: imageId }); @@ -56,7 +57,7 @@ export default abstract class MediaFileAdapter { switch (type) { case "image": - mediaFile.images = this.load(url, "image", loadConfig); + mediaFile.images = this.process(url, "image", loadConfig); break; case "video": @@ -78,5 +79,5 @@ export default abstract class MediaFileAdapter { }; - public abstract load(url: string, type: MediaFileTypes, config: BaseConfigProperty): Promise<{ origin: string, small: string, large: string }>; + public abstract process(url: string, type: MediaFileTypes, config: BaseConfigProperty): Promise<{ origin: string, small: string, large: string }>; } diff --git a/adapters/mediafile/default/local.d.ts b/adapters/mediafile/default/local.d.ts index b46ec728..189075ca 100644 --- a/adapters/mediafile/default/local.d.ts +++ b/adapters/mediafile/default/local.d.ts @@ -26,14 +26,17 @@ interface LoadMediaFilesProcess { config: MediaFileConfigInner; } export default class LocalMediaFileAdapter extends MediaFileAdapter { + private processing; + private processingTimeout; loadMediaFilesProcessQueue: LoadMediaFilesProcess[]; constructor(config: BaseConfig); getNameByUrl(url: string, ext: string, options?: any, salt?: boolean): string; - load(url: string, type: MediaFileTypes, config: BaseConfig): Promise<{ + process(url: string, type: MediaFileTypes, config: BaseConfig): Promise<{ origin: string; small: string; large: string; }>; + protected getPrefix(type: string): string; protected download(loadMediaFilesProcess: LoadMediaFilesProcess): Promise; private loadMediaFiles; } diff --git a/adapters/mediafile/default/local.js b/adapters/mediafile/default/local.js index 6a1cfc97..e6edf25f 100644 --- a/adapters/mediafile/default/local.js +++ b/adapters/mediafile/default/local.js @@ -29,6 +29,7 @@ const path = require("path"); class LocalMediaFileAdapter extends MediaFileAdapter_1.default { constructor(config) { super(config); + this.processing = false; this.loadMediaFilesProcessQueue = []; this.loadMediaFiles(); } @@ -39,10 +40,10 @@ class LocalMediaFileAdapter extends MediaFileAdapter_1.default { baseName = (0, uuid_1.v5)(baseName, this.UUID_NAMESPACE); if (salt) baseName += `-${(new Date()).getTime()}`; - baseName += ext; + baseName += `.${ext}`; return baseName; } - async load(url, type, config) { + async process(url, type, config) { const baseConfig = { format: "webp", resize: { @@ -58,7 +59,7 @@ class LocalMediaFileAdapter extends MediaFileAdapter_1.default { background: "white" }; const cfg = { ...baseConfig, ...config }; - const mediafileExtesion = url.match(/\.([0-9a-z]+)(?=[?#])|(\.)(?:[\w]+)$/gim)[0]; + const mediafileExtesion = url.match(/\.([0-9a-z]+)(?=[?#])|(\.)(?:[\w]+)$/gim)[0].replace('.', ''); const origin = this.getNameByUrl(url, mediafileExtesion); const name = { origin: origin, @@ -76,52 +77,94 @@ class LocalMediaFileAdapter extends MediaFileAdapter_1.default { }); return name; } + getPrefix(type) { + return path.join(process.cwd(), ".tmp/public", type); + } async download(loadMediaFilesProcess) { - const prefix = path.join(process.cwd(), ".tmp/public", loadMediaFilesProcess.type); + const prefix = this.getPrefix(loadMediaFilesProcess.type); const fullPathDl = path.join(prefix, loadMediaFilesProcess.name.origin); - const response = await axios_1.default.get(loadMediaFilesProcess.url, { responseType: 'stream' }); - fs.mkdirSync(prefix, { recursive: true }); - const writer = fs.createWriteStream(fullPathDl); - response.data.pipe(writer); - await new Promise((resolve, reject) => { - writer.on('finish', resolve); - writer.on('error', reject); - }); + // Check if file exists + if (!fs.existsSync(fullPathDl)) { + const response = await axios_1.default.get(loadMediaFilesProcess.url, { responseType: 'stream' }); + sails.log.silly(`MF local > download image: ${fullPathDl}, status: ${response.status}`); + fs.mkdirSync(prefix, { recursive: true }); + const writer = fs.createWriteStream(fullPathDl); + response.data.pipe(writer); + await new Promise((resolve, reject) => { + writer.on('finish', resolve); + writer.on('error', reject); + }); + } + else { + sails.log.silly(`File ${fullPathDl} already exists. Skipping download.`); + } } async loadMediaFiles() { - const MEDIAFILE_PARALEL_TO_DOWNLOAD = await Settings.get('MEDIAFILE_PARALEL_TO_DOWNLOAD') ?? 3; + if (this.processing) { + return; + } + if (this.loadMediaFilesProcessQueue.length === 0) { + sails.log.silly(`MF local > no mediafiles to download`); + this.processingTimeout = setTimeout(this.loadMediaFiles.bind(this), 30000); + return; + } + this.processing = true; + let MEDIAFILE_PARALEL_TO_DOWNLOAD = await Settings.get('MEDIAFILE_PARALEL_TO_DOWNLOAD') ?? 3; + if (MEDIAFILE_PARALEL_TO_DOWNLOAD > this.loadMediaFilesProcessQueue.length) + MEDIAFILE_PARALEL_TO_DOWNLOAD = this.loadMediaFilesProcessQueue.length; while (this.loadMediaFilesProcessQueue.length) { const loadMediaFilesProcesses = this.loadMediaFilesProcessQueue.splice(0, MEDIAFILE_PARALEL_TO_DOWNLOAD); - const downloadPromises = loadMediaFilesProcesses.map(async (loadMediaFilesProcess) => { - const prefix = await this.download(loadMediaFilesProcess); - switch (loadMediaFilesProcess.type) { - case "image": - for (let size in loadMediaFilesProcess.config.resize) { - if (size === "origin") - continue; - const mediafileItem = loadMediaFilesProcess.config.resize[size]; - if (!mediafileItem.width && !mediafileItem.height) { - throw "Not valid mediafile config. Must have name (key) and one of width or height"; + console.log(this.loadMediaFilesProcessQueue.length, 10000); + const downloadPromises = loadMediaFilesProcesses.map((loadMediaFilesProcess) => { + return this.download(loadMediaFilesProcess).then(async () => { + const prefix = this.getPrefix(loadMediaFilesProcess.type); + switch (loadMediaFilesProcess.type) { + case "image": + sails.log.silly(`MF local > process image: ${loadMediaFilesProcess.name.origin}`); + for (let size in loadMediaFilesProcess.config.resize) { + const dstPath = path.join(prefix, loadMediaFilesProcess.name[size]); + if (!fs.existsSync(dstPath)) { + if (size === "origin") + continue; + const mediafileItem = loadMediaFilesProcess.config.resize[size]; + if (!mediafileItem.width && !mediafileItem.height) { + throw "Not valid mediafile config. Must have name (key) and one of width or height"; + } + mediafileItem.width = mediafileItem.width || mediafileItem.height; + mediafileItem.height = mediafileItem.height || mediafileItem.width; + await resizeMediaFile({ + srcPath: path.join(prefix, loadMediaFilesProcess.name.origin), + dstPath: path.join(prefix, loadMediaFilesProcess.name[size]), + width: mediafileItem.width, + height: mediafileItem.height, + customArgs: ["-background", loadMediaFilesProcess.config.background || "white", "-flatten"], + }); + sails.log.silly(`MF local > process finished: ${loadMediaFilesProcess.name[size]}`); + } + else { + sails.log.silly(`MF local > process skip existing processed file: ${loadMediaFilesProcess.name[size]}`); + } } - mediafileItem.width = mediafileItem.width || mediafileItem.height; - mediafileItem.height = mediafileItem.height || mediafileItem.width; - await resizeMediaFile({ - srcPath: path.normalize(prefix + loadMediaFilesProcess.name.origin), - dstPath: path.normalize(prefix + loadMediaFilesProcess.name[size]), - width: mediafileItem.width, - height: mediafileItem.height, - customArgs: ["-background", loadMediaFilesProcess.config.background || "white", "-flatten"], - }); - } - break; - default: - break; - } + break; + default: + break; + } + }).catch(error => { + // Log the error and rethrow it + sails.log.error(`Error processing file ${loadMediaFilesProcess.name.origin}: ${error}`); + }); }); - // Wait for all downloads and processing to complete - await Promise.all(downloadPromises); + try { + // Wait for all downloads and processing to complete + await Promise.all(downloadPromises); + } + catch (error) { + // Handle errors that occurred during processing + sails.log.error(`An error occurred during file processing: ${error}`); + } } - setTimeout(this.loadMediaFiles.bind(this), 10000); + this.processing = false; + this.processingTimeout = setTimeout(this.loadMediaFiles.bind(this), 30000); } } exports.default = LocalMediaFileAdapter; diff --git a/adapters/mediafile/default/local.ts b/adapters/mediafile/default/local.ts index a8a1eaf2..402880b9 100644 --- a/adapters/mediafile/default/local.ts +++ b/adapters/mediafile/default/local.ts @@ -59,7 +59,11 @@ interface LoadMediaFilesProcess { // }, export default class LocalMediaFileAdapter extends MediaFileAdapter { - + private processing: boolean = false; + + + private processingTimeout: ReturnType // TODO: rewrite by proxy + public loadMediaFilesProcessQueue: LoadMediaFilesProcess[] = []; constructor(config: BaseConfig) { super(config); @@ -71,11 +75,11 @@ export default class LocalMediaFileAdapter extends MediaFileAdapter { if (options) baseName += JSON.stringify(options); baseName = uuidv5(baseName, this.UUID_NAMESPACE); if(salt) baseName += `-${(new Date()).getTime()}`; - baseName += ext; + baseName += `.${ext}`; return baseName; } - public async load(url: string, type: MediaFileTypes, config: BaseConfig): Promise<{ origin: string, small: string, large: string }> { + public async process(url: string, type: MediaFileTypes, config: BaseConfig): Promise<{ origin: string, small: string, large: string }> { const baseConfig: MediaFileConfigInner = { format: "webp", resize: { @@ -93,7 +97,7 @@ export default class LocalMediaFileAdapter extends MediaFileAdapter { const cfg = {...baseConfig,...config} as unknown as MediaFileConfigInner; - const mediafileExtesion = url.match(/\.([0-9a-z]+)(?=[?#])|(\.)(?:[\w]+)$/gim)[0]; + const mediafileExtesion = url.match(/\.([0-9a-z]+)(?=[?#])|(\.)(?:[\w]+)$/gim)[0].replace('.', ''); const origin = this.getNameByUrl(url, mediafileExtesion); const name = { @@ -116,63 +120,103 @@ export default class LocalMediaFileAdapter extends MediaFileAdapter { return name; } - protected async download(loadMediaFilesProcess: LoadMediaFilesProcess): Promise { - const prefix = path.join(process.cwd(), ".tmp/public", loadMediaFilesProcess.type); - const fullPathDl = path.join(prefix, loadMediaFilesProcess.name.origin); - - const response = await axios.get(loadMediaFilesProcess.url, { responseType: 'stream' }); - - fs.mkdirSync(prefix, { recursive: true }); - - const writer = fs.createWriteStream(fullPathDl); - response.data.pipe(writer); - - await new Promise((resolve, reject) => { - writer.on('finish', resolve); - writer.on('error', reject); - }); + protected getPrefix(type: string) { + return path.join(process.cwd(), ".tmp/public", type); } - private async loadMediaFiles() { - const MEDIAFILE_PARALEL_TO_DOWNLOAD = await Settings.get('MEDIAFILE_PARALEL_TO_DOWNLOAD') as number ?? 3; + protected async download(loadMediaFilesProcess: LoadMediaFilesProcess): Promise { + const prefix = this.getPrefix(loadMediaFilesProcess.type); + const fullPathDl = path.join(prefix, loadMediaFilesProcess.name.origin); - while (this.loadMediaFilesProcessQueue.length) { - const loadMediaFilesProcesses = this.loadMediaFilesProcessQueue.splice(0, MEDIAFILE_PARALEL_TO_DOWNLOAD); + // Check if file exists + if (!fs.existsSync(fullPathDl)) { + const response = await axios.get(loadMediaFilesProcess.url, { responseType: 'stream' }); + sails.log.silly(`MF local > download image: ${fullPathDl}, status: ${response.status}`); - const downloadPromises = loadMediaFilesProcesses.map(async (loadMediaFilesProcess) => { - const prefix = await this.download(loadMediaFilesProcess); + fs.mkdirSync(prefix, { recursive: true }); - switch (loadMediaFilesProcess.type) { - case "image": - for (let size in loadMediaFilesProcess.config.resize) { - if (size === "origin") continue; - const mediafileItem = loadMediaFilesProcess.config.resize[size]; - if (!mediafileItem.width && !mediafileItem.height) { - throw "Not valid mediafile config. Must have name (key) and one of width or height"; - } - mediafileItem.width = mediafileItem.width || mediafileItem.height; - mediafileItem.height = mediafileItem.height || mediafileItem.width; - - await resizeMediaFile({ - srcPath: path.normalize(prefix + loadMediaFilesProcess.name.origin), - dstPath: path.normalize(prefix + loadMediaFilesProcess.name[size]), - width: mediafileItem.width, - height: mediafileItem.height, - customArgs: ["-background", loadMediaFilesProcess.config.background || "white", "-flatten"], - }); - } - break; - default: - break; - } - }); - - // Wait for all downloads and processing to complete - await Promise.all(downloadPromises); - } + const writer = fs.createWriteStream(fullPathDl); + response.data.pipe(writer); - setTimeout(this.loadMediaFiles.bind(this), 10000); + await new Promise((resolve, reject) => { + writer.on('finish', resolve); + writer.on('error', reject); + }); + } else { + sails.log.silly(`File ${fullPathDl} already exists. Skipping download.`); + } } + + + private async loadMediaFiles() { + if(this.processing) { + return + } + + if (this.loadMediaFilesProcessQueue.length === 0) { + sails.log.silly(`MF local > no mediafiles to download`) + this.processingTimeout = setTimeout(this.loadMediaFiles.bind(this), 30000); + return; + } + + this.processing = true + let MEDIAFILE_PARALEL_TO_DOWNLOAD = await Settings.get('MEDIAFILE_PARALEL_TO_DOWNLOAD') as number ?? 3; + if (MEDIAFILE_PARALEL_TO_DOWNLOAD > this.loadMediaFilesProcessQueue.length) MEDIAFILE_PARALEL_TO_DOWNLOAD = this.loadMediaFilesProcessQueue.length; + + while (this.loadMediaFilesProcessQueue.length) { + + const loadMediaFilesProcesses = this.loadMediaFilesProcessQueue.splice(0, MEDIAFILE_PARALEL_TO_DOWNLOAD); + console.log(this.loadMediaFilesProcessQueue.length , 10000) + const downloadPromises = loadMediaFilesProcesses.map((loadMediaFilesProcess) => { + return this.download(loadMediaFilesProcess).then(async () => { + const prefix = this.getPrefix(loadMediaFilesProcess.type); + switch (loadMediaFilesProcess.type) { + case "image": + sails.log.silly(`MF local > process image: ${loadMediaFilesProcess.name.origin}`) + for (let size in loadMediaFilesProcess.config.resize) { + const dstPath = path.join(prefix,loadMediaFilesProcess.name[size]) + if (!fs.existsSync(dstPath)) { + if (size === "origin") continue; + const mediafileItem = loadMediaFilesProcess.config.resize[size]; + if (!mediafileItem.width && !mediafileItem.height) { + throw "Not valid mediafile config. Must have name (key) and one of width or height"; + } + mediafileItem.width = mediafileItem.width || mediafileItem.height; + mediafileItem.height = mediafileItem.height || mediafileItem.width; + + await resizeMediaFile({ + srcPath: path.join(prefix, loadMediaFilesProcess.name.origin), + dstPath: path.join(prefix,loadMediaFilesProcess.name[size]), + width: mediafileItem.width, + height: mediafileItem.height, + customArgs: ["-background", loadMediaFilesProcess.config.background || "white", "-flatten"], + }); + sails.log.silly(`MF local > process finished: ${loadMediaFilesProcess.name[size]}`) + } else { + sails.log.silly(`MF local > process skip existing processed file: ${loadMediaFilesProcess.name[size]}`) + } + } + break; + default: + break; + } + }).catch(error => { + // Log the error and rethrow it + sails.log.error(`Error processing file ${loadMediaFilesProcess.name.origin}: ${error}`); + }); + }); + + try { + // Wait for all downloads and processing to complete + await Promise.all(downloadPromises); + } catch (error) { + // Handle errors that occurred during processing + sails.log.error(`An error occurred during file processing: ${error}`); + } + } + this.processing = false + this.processingTimeout = setTimeout(this.loadMediaFiles.bind(this), 30000); + } } function resizeMediaFile(opts: any) { diff --git a/adapters/rms/RMSAdapter.js b/adapters/rms/RMSAdapter.js index ac971f29..8302dc50 100644 --- a/adapters/rms/RMSAdapter.js +++ b/adapters/rms/RMSAdapter.js @@ -18,6 +18,13 @@ class RMSAdapter { await this.initializationPromise; } async initialize() { + try { + await this.customInitialize(); + } + catch (error) { + sails.log.error('RMS inittialization error >> ', error); + return; + } // Run product sync interval const NO_SYNC_NOMENCLATURE = await Settings.get("NO_SYNC_NOMENCLATURE") ?? false; if (!NO_SYNC_NOMENCLATURE) { @@ -28,6 +35,10 @@ class RMSAdapter { this.syncProducts(); }, SYNC_PRODUCTS_INTERVAL_SECOUNDS < 120 ? 120000 : SYNC_PRODUCTS_INTERVAL_SECOUNDS * 1000 || 120000); } + // Run on load + if (process.env.NODE_ENV !== "production") { + this.syncProducts(); + } // Run sync OutOfStock const NO_SYNC_OUT_OF_STOCKS = await Settings.get("NO_SYNC_OUT_OF_STOCKS") ?? false; if (!NO_SYNC_OUT_OF_STOCKS) { @@ -38,7 +49,6 @@ class RMSAdapter { this.syncOutOfStocks(); }, SYNC_OUT_OF_STOCKS_INTERVAL_SECOUNDS < 60 ? 60000 : SYNC_OUT_OF_STOCKS_INTERVAL_SECOUNDS * 1000 || 60000); } - await this.customInitialize(); } /** * Menu synchronization with RMS system @@ -84,14 +94,12 @@ class RMSAdapter { const SKIP_LOAD_PRODUCT_IMAGES = await Settings.get("SKIP_LOAD_PRODUCT_IMAGES") ?? false; // Load images if (product.images && product.images.length && !SKIP_LOAD_PRODUCT_IMAGES) { - console.log(product.images); const isURL = (str) => /^(https?:\/\/)?[\w.-]+(\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/.test(str); for (let image of product.images) { if (isURL(image)) { // load image const mfAdater = await Adapter.getMediaFileAdapter(); const mediaFileImage = await mfAdater.toDownload(image, 'dish', 'image'); - console.log(mediaFileImage); await Dish.addToCollection(product.id, 'images').members([mediaFileImage.id]); } else { diff --git a/adapters/rms/RMSAdapter.ts b/adapters/rms/RMSAdapter.ts index 5748005a..b7dfc372 100644 --- a/adapters/rms/RMSAdapter.ts +++ b/adapters/rms/RMSAdapter.ts @@ -43,6 +43,14 @@ export default abstract class RMSAdapter { } private async initialize(): Promise { + + try { + await this.customInitialize(); + } catch (error) { + sails.log.error('RMS inittialization error >> ', error) + return + } + // Run product sync interval const NO_SYNC_NOMENCLATURE = await Settings.get("NO_SYNC_NOMENCLATURE") as boolean ?? false; if(!NO_SYNC_NOMENCLATURE) { @@ -56,6 +64,11 @@ export default abstract class RMSAdapter { ); } + // Run on load + if (process.env.NODE_ENV !== "production") { + this.syncProducts(); + } + // Run sync OutOfStock const NO_SYNC_OUT_OF_STOCKS = await Settings.get("NO_SYNC_OUT_OF_STOCKS") as boolean ?? false; if(!NO_SYNC_OUT_OF_STOCKS) { @@ -69,7 +82,6 @@ export default abstract class RMSAdapter { ); } - await this.customInitialize(); } @@ -129,14 +141,12 @@ export default abstract class RMSAdapter { const SKIP_LOAD_PRODUCT_IMAGES = await Settings.get("SKIP_LOAD_PRODUCT_IMAGES") as boolean ?? false // Load images if(product.images && product.images.length && !SKIP_LOAD_PRODUCT_IMAGES) { - console.log(product.images) const isURL = (str) => /^(https?:\/\/)?[\w.-]+(\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]+$/.test(str); for (let image of product.images){ if (isURL(image)){ // load image const mfAdater = await Adapter.getMediaFileAdapter() const mediaFileImage = await mfAdater.toDownload(image as string, 'dish', 'image'); - console.log(mediaFileImage) await Dish.addToCollection(product.id, 'images').members([mediaFileImage.id]); } else { sails.log.debug(`Image not url on sync products ${image}`); diff --git a/models/Dish.js b/models/Dish.js index 1c0e3ff8..dbaf5bce 100644 --- a/models/Dish.js +++ b/models/Dish.js @@ -271,6 +271,7 @@ let Model = { * @return Updated or created dish */ async createOrUpdate(values) { + sails.log.silly(`Core > Dish > createOrUpdate: ${values.name}`); let hash = (0, hashCode_1.default)(JSON.stringify(values)); const dish = await Dish.findOne({ id: values.id }); if (!dish) { diff --git a/models/Dish.ts b/models/Dish.ts index f90cb41b..d6feb1d6 100644 --- a/models/Dish.ts +++ b/models/Dish.ts @@ -342,6 +342,7 @@ let Model = { * @return Updated or created dish */ async createOrUpdate(values: Dish): Promise { + sails.log.silly(`Core > Dish > createOrUpdate: ${values.name}`) let hash = hashCode(JSON.stringify(values)); const dish = await Dish.findOne({ id: values.id }); if (!dish) { diff --git a/models/Group.js b/models/Group.js index ae3f31e7..aefe9cd5 100644 --- a/models/Group.js +++ b/models/Group.js @@ -268,6 +268,7 @@ let Model = { * @return Updated or created group */ async createOrUpdate(values) { + sails.log.silly(`Core > Group > createOrUpdate: ${values.name}`); const group = await Group.findOne({ id: values.id }); if (!group) { return Group.create(values).fetch(); diff --git a/models/Group.ts b/models/Group.ts index ef1474d4..78a7ce53 100644 --- a/models/Group.ts +++ b/models/Group.ts @@ -329,6 +329,7 @@ let Model = { * @return Updated or created group */ async createOrUpdate(values: Group): Promise { + sails.log.silly(`Core > Group > createOrUpdate: ${values.name}`) const group = await Group.findOne({ id: values.id }); if (!group) { return Group.create(values).fetch(); diff --git a/models/Settings.js b/models/Settings.js index 0553d91c..7b565254 100644 --- a/models/Settings.js +++ b/models/Settings.js @@ -60,7 +60,7 @@ let Model = { value = JSON.parse(process.env[key]); } catch (e) { - sails.log.error("CORE > Settings > use ENV parse error: ", e); + // sails.log.error("CORE > Settings > use ENV parse error: ", e); value = process.env[key]; } finally { diff --git a/models/Settings.ts b/models/Settings.ts index 2343c86a..31eaa71f 100644 --- a/models/Settings.ts +++ b/models/Settings.ts @@ -86,7 +86,7 @@ let Model = { try { value = JSON.parse(process.env[key]); } catch (e) { - sails.log.error("CORE > Settings > use ENV parse error: ", e); + // sails.log.error("CORE > Settings > use ENV parse error: ", e); value = process.env[key]; } finally { if (!(await Settings.find({ key: key }).limit(1))[0]) await Settings.set(key, value, "env");