From be5cf3f1908962992aae1f1ee3ce3a7cf805db94 Mon Sep 17 00:00:00 2001 From: rodrigorodriguez Date: Mon, 13 Feb 2023 17:31:38 -0300 Subject: [PATCH] new(all): #329 MERGE keyword added. --- package.json | 1 + .../services/ImageProcessingServices.ts | 32 +++++++++++++++++++ .../services/KeywordsExpressions.ts | 7 ++++ .../basic.gblib/services/SystemKeywords.ts | 1 + 4 files changed, 41 insertions(+) diff --git a/package.json b/package.json index 835737bb..033f81bf 100644 --- a/package.json +++ b/package.json @@ -105,6 +105,7 @@ "google-libphonenumber": "3.2.31", "googleapis": "109.0.1", "ibm-watson": "7.1.2", + "join-images-updated": "1.1.4", "keyv": "4.5.2", "koa": "2.13.4", "koa-body": "6.0.1", diff --git a/packages/basic.gblib/services/ImageProcessingServices.ts b/packages/basic.gblib/services/ImageProcessingServices.ts index 63dc84c8..9bd96ba0 100644 --- a/packages/basic.gblib/services/ImageProcessingServices.ts +++ b/packages/basic.gblib/services/ImageProcessingServices.ts @@ -32,9 +32,15 @@ 'use strict'; +import Path from 'path'; import { GBLog, GBMinInstance } from 'botlib'; import { DialogKeywords } from './DialogKeywords.js'; import sharp from 'sharp'; +import joinImages from 'join-images-updated'; +import { CollectionUtil } from 'pragmatismo-io-framework'; +import { GBAdminService } from '../../admin.gbapp/services/GBAdminService.js'; +import urlJoin from 'url-join'; +import { GBServer } from '../../../src/app.js'; /** * Image processing services of conversation to be called by BASIC. @@ -95,6 +101,32 @@ export class ImageProcessingServices { return; } + /** + * SET ORIENTATION VERTICAL + * + * file = MERGE file1, file2, file3 + */ + public async mergeImage({pid, files}) + { + const { min, user } = await DialogKeywords.getProcessInfo(pid); + + let paths = []; + await CollectionUtil.asyncForEach(files, async file => { + const gbfile = DialogKeywords.getFileByHandle(file); + paths.push(gbfile.path); + }); + + const botId = this.min.instance.botId; + const gbaiName = `${botId}.gbai`; + const img = await joinImages(paths); + const localName = Path.join('work', gbaiName, 'cache', `img-mrg${GBAdminService.getRndReadableIdentifier()}.png`); + const url = urlJoin(GBServer.globals.publicAddress, min.botId, 'cache', Path.basename(localName)); + img.toFile(localName); + + return { localName: localName, url: url, data: null }; + + } + /** * Sharpen the image. * diff --git a/packages/basic.gblib/services/KeywordsExpressions.ts b/packages/basic.gblib/services/KeywordsExpressions.ts index 26bf4f65..8df1cd92 100644 --- a/packages/basic.gblib/services/KeywordsExpressions.ts +++ b/packages/basic.gblib/services/KeywordsExpressions.ts @@ -677,6 +677,13 @@ export class KeywordsExpressions { } ]; + keywords[i++] = [ + /^\s*(MERGE)(\s*)(.*)/gim, + ($0, $1, $2, $3) => { + return `await img.mergeImage({pid: pid, files: [${$3}]})`; + } + ]; + keywords[i++] = [ /^\s*PRESS\s*(.*)/gim, ($0, $1, $2) => { diff --git a/packages/basic.gblib/services/SystemKeywords.ts b/packages/basic.gblib/services/SystemKeywords.ts index c8642775..786f4d42 100644 --- a/packages/basic.gblib/services/SystemKeywords.ts +++ b/packages/basic.gblib/services/SystemKeywords.ts @@ -1412,6 +1412,7 @@ export class SystemKeywords { const images = []; let index = 0; path = Path.join(gbaiName, 'cache', `tmp${GBAdminService.getRndReadableIdentifier()}.docx`); + url = urlJoin(GBServer.globals.publicAddress, min.botId, 'cache', Path.basename(localName)); const traverseDataToInjectImageUrl = async o => { for (var i in o) {