From 99b5e7ab6d1373ba96032f7ab18bc9e91ef42cbf Mon Sep 17 00:00:00 2001 From: Divlo Date: Fri, 26 May 2023 22:58:26 +0200 Subject: [PATCH] chore: remove synchronization capability --- core/data/en/answers.json | 6 - core/data/fr/answers.json | 6 - server/src/core/brain/brain.ts | 23 --- server/src/core/brain/types.ts | 1 - server/src/core/synchronizer.js | 246 -------------------------------- 5 files changed, 282 deletions(-) delete mode 100644 server/src/core/synchronizer.js diff --git a/core/data/en/answers.json b/core/data/en/answers.json index 0b8f6eda..101aa019 100644 --- a/core/data/en/answers.json +++ b/core/data/en/answers.json @@ -5,12 +5,6 @@ "errors": { "not_found": "Sorry, it seems I cannot find that" }, - "synchronizer": { - "syncing_direct": "I will now synchronize the downloaded content on your current device. Don't worry, I will let you know once I'm done", - "synced_direct": "The new content has been synchronized on your device", - "syncing_google_drive": "I will now synchronize the downloaded content on Google Drive. Don't worry, I will let you know once I'm done", - "synced_google_drive": "The new content is now available on Google Drive" - }, "random_errors": [ "Sorry, there is a problem with my system. Please check my logs for further details", "Sorry, I don't work correctly. Please look at my logs for more information", diff --git a/core/data/fr/answers.json b/core/data/fr/answers.json index f9d6d6b6..f4df9673 100644 --- a/core/data/fr/answers.json +++ b/core/data/fr/answers.json @@ -6,12 +6,6 @@ "not_found": "Désolé, il semblerait que je n'arrive pas à trouver ça", "nlu": "L'erreur semble provenir de ma compréhension de langage naturel. Voici plus de détails au sujet de cette dernière : \"%error%\"" }, - "synchronizer": { - "syncing_direct": "Je vais maintenant synchroniser le contenu téléchargé sur votre appareil actuel. Ne vous inquiétez pas, je vous préviendrai lorsque j'aurai terminé", - "synced_direct": "Le nouveau contenu a été synchronisé sur votre appareil", - "syncing_google_drive": "Je vais maintenant synchroniser le contenu téléchargé sur Google Drive. Ne vous inquiétez pas, je vous préviendrai lorsque j'aurai terminé", - "synced_google_drive": "Le nouveau contenu est maintenant disponible sur Google Drive" - }, "random_errors": [ "Désolé, il y a un problème avec mon système. Veuillez consulter mes logs pour plus de détails", "Désolé, je ne fonctionne pas correctement. Merci de regarder mes logs pour plus d'information", diff --git a/server/src/core/brain/brain.ts b/server/src/core/brain/brain.ts index 7486f28d..1b312424 100644 --- a/server/src/core/brain/brain.ts +++ b/server/src/core/brain/brain.ts @@ -32,7 +32,6 @@ import { LangHelper } from '@/helpers/lang-helper' import { LogHelper } from '@/helpers/log-helper' import { SkillDomainHelper } from '@/helpers/skill-domain-helper' import { StringHelper } from '@/helpers/string-helper' -import Synchronizer from '@/core/synchronizer' import type { AnswerOutput } from '@sdk/types' import { DateHelper } from '@/helpers/date-helper' @@ -420,28 +419,6 @@ export default class Brain { if (this.skillOutput !== '') { try { skillResult = JSON.parse(this.skillOutput) - - // Synchronize the downloaded content if enabled - if ( - skillResult && - skillResult.output.options['synchronization'] && - skillResult.output.options['synchronization'].enabled && - skillResult.output.options['synchronization'].enabled === true - ) { - const sync = new Synchronizer( - this, - nluResult.classification, - skillResult.output.options['synchronization'] - ) - - // When the synchronization is finished - sync.synchronize((speech: string) => { - if (!this.isMuted) { - this.talk(speech) - } - speeches.push(speech) - }) - } } catch (e) { LogHelper.title(`${this.skillFriendlyName} skill`) LogHelper.error( diff --git a/server/src/core/brain/types.ts b/server/src/core/brain/types.ts index 7ed8f66e..34cfd3b9 100644 --- a/server/src/core/brain/types.ts +++ b/server/src/core/brain/types.ts @@ -86,7 +86,6 @@ export interface SkillAnswerOutput extends IntentObject { answer: SkillAnswerConfigSchema core?: SkillAnswerCoreData widget?: unknown // TODO - options: Record } } diff --git a/server/src/core/synchronizer.js b/server/src/core/synchronizer.js deleted file mode 100644 index 92e61f7d..00000000 --- a/server/src/core/synchronizer.js +++ /dev/null @@ -1,246 +0,0 @@ -/* eslint-disable */ - -// TODO: remove the synchronization capability - -import fs from 'node:fs' -import path from 'node:path' - -import { google } from 'googleapis' -import { waterfall } from 'async' - -import { LogHelper } from '@/helpers/log-helper' - -class Synchronizer { - constructor(brain, classification, sync) { - this.brain = brain - this.classification = classification - this.sync = sync - this.downloadDir = `${__dirname}/../../../downloads/${this.classification.domain}/${this.classification.skill}` - - LogHelper.title('Synchronizer') - LogHelper.success('New instance') - } - - /** - * Choose the right method to synchronize - */ - async synchronize(cb) { - let code = 'synced_direct' - - this.brain.talk( - `${this.brain.wernicke( - 'synchronizer', - `syncing_${this.sync.method.toLowerCase().replace('-', '_')}` - )}.` - ) - this.brain.socket.emit('is-typing', false) - - if (this.sync.method === 'google-drive') { - code = 'synced_google_drive' - await this.googleDrive() - } else { - await this.direct() - } - - return cb(`${this.brain.wernicke('synchronizer', code)}.`) - } - - /** - * Direct synchronization method - */ - direct() { - return new Promise((resolve) => { - this.brain.socket.emit('download', { - domain: this.classification.domain, - skill: this.classification.skill, - action: this.classification.action - }) - - resolve() - }) - } - - /** - * Google Drive synchronization method - */ - googleDrive() { - return new Promise(async (resolve, reject) => { - const driveFolderName = `leon-${this.classification.domain}-${this.classification.skill}` - const folderMimeType = 'application/vnd.google-apps.folder' - const entities = await fs.promises.readdir(this.downloadDir) - const key = JSON.parse( - await fs.promises.readFile( - path.join( - process.cwd(), - 'core/config/synchronizer/google-drive.json' - ), - 'utf8' - ) - ) - const authClient = new google.auth.JWT( - key.client_email, - key, - key.private_key, - // Available scopes: https://developers.google.com/identity/protocols/googlescopes - ['https://www.googleapis.com/auth/drive'], - null - ) - const drive = google.drive({ - version: 'v3', - auth: authClient - }) - let folderId = '' - - waterfall( - [ - (cb) => { - drive.files.list({}, (err, list) => { - if (err) { - LogHelper.error(`Error during listing: ${err}`) - return reject(err) - } - cb(null, list) - return true - }) - }, - (list, cb) => { - if (list.data.files.length === 0) { - return cb(null, false, folderId) - } - - // Browse entities - for (let i = 0; i < list.data.files.length; i += 1) { - // In case the skill folder exists - if ( - list.data.files[i].mimeType === folderMimeType && - list.data.files[i].name === driveFolderName - ) { - folderId = list.data.files[i].id - return cb(null, true, folderId) - } else if (i + 1 === list.data.files.length) { - return cb(null, false, folderId) - } - // TODO: UI toolbox to reach this scope - // Delete Drive files - /* setTimeout(() => { - drive.files.delete({ fileId: list.data.files[i].id }) - LOG.title('Synchronizer'); LOG.success(`"${list.data.files[i].id}" deleted`) - }, 200 * i) */ - } - - return false - }, - (folderExists, folderId, cb) => { - if (folderExists === false) { - // Create the skill folder if it does not exist - drive.files.create( - { - resource: { - name: driveFolderName, - mimeType: folderMimeType - }, - fields: 'id' - }, - (err, folder) => { - if (err) { - LogHelper.error(`Error during the folder creation: ${err}`) - return reject(err) - } - - folderId = folder.data.id - LogHelper.title('Synchronizer') - LogHelper.success( - `"${driveFolderName}" folder created on Google Drive` - ) - - // Give ownership - return drive.permissions.create( - { - resource: { - type: 'user', - role: 'owner', - emailAddress: this.sync.email - }, - emailMessage: - 'Hey, I created a new folder to wrap your new content, cheers. Leon.', - transferOwnership: true, - fileId: folderId - }, - (err) => { - if (err) { - LogHelper.error( - `Error during the folder permission creation: ${err}` - ) - return reject(err) - } - LogHelper.success( - `"${driveFolderName}" ownership transferred` - ) - cb(null, folderId) - return true - } - ) - } - ) - } else { - return cb(null, folderId) - } - return false - }, - (folderId, cb) => { - let iEntities = 0 - const upload = (i) => { - drive.files.create( - { - resource: { - name: entities[i], - parents: [folderId] - }, - media: { - body: fs.createReadStream( - `${this.downloadDir}/${entities[i]}` - ) - }, - fields: 'id' - }, - (err) => { - if (err) { - LogHelper.error( - `Error during the "${entities[i]}" file creation: ${err}` - ) - return reject(err) - } - iEntities += 1 - LogHelper.title('Synchronizer') - LogHelper.success( - `"${entities[i]}" file added to Google Drive` - ) - if (iEntities === entities.length) { - cb(null) - } - return true - } - ) - } - // Browse entities in Leon's memory - for (let i = 0; i < entities.length; i += 1) { - // Upload file to Drive - upload(i) - } - } - ], - (err) => { - if (err) { - LogHelper.error(err) - return reject(err) - } - // Content available on Google Drive - resolve() - return true - } - ) - }) - } -} - -export default Synchronizer