From 46a12ed698a881c3c39b0c6c54e87dcf936b93e0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 18 Jul 2024 15:45:23 +0530 Subject: [PATCH 1/3] [desktop] Include app version in X-Client-Package --- web/packages/next/app.ts | 11 ++++++++++- web/packages/next/next.config.base.js | 12 ++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/web/packages/next/app.ts b/web/packages/next/app.ts index 89cd492c09..3547357ddc 100644 --- a/web/packages/next/app.ts +++ b/web/packages/next/app.ts @@ -34,6 +34,13 @@ export const appName: AppName = process.env.appName as AppName; */ export const isDesktop = process.env.isDesktop == "1"; +/** + * Version of the desktop app. + * + * This is only defined when {@link isDesktop} is true. + */ +export const desktopAppVersion = process.env.desktopAppVersion; + /** * Static (English) title for the app. * @@ -59,7 +66,9 @@ export const clientPackageName = (() => { if (isDesktop) { if (appName != "photos") throw new Error(`Unsupported desktop appName ${appName}`); - return "io.ente.photos.desktop"; + if (!desktopAppVersion) + throw new Error(`desktopAppVersion is not defined`); + return `io.ente.photos.desktop/${desktopAppVersion}`; } return { accounts: "io.ente.accounts.web", diff --git a/web/packages/next/next.config.base.js b/web/packages/next/next.config.base.js index b658089e11..f496bcb4e0 100644 --- a/web/packages/next/next.config.base.js +++ b/web/packages/next/next.config.base.js @@ -13,6 +13,7 @@ const cp = require("child_process"); const os = require("os"); const path = require("path"); +const fs = require("fs"); /** * Return the current commit ID if we're running inside a git repository. @@ -64,6 +65,16 @@ const appName = path.basename(process.cwd()); */ const isDesktop = process.env._ENTE_IS_DESKTOP ? "1" : ""; +/** + * When we're running within the desktop app, also extract the version of the + * desktop app for use in our "X-Client-Package" string. + * + * > The web app has continuous deployments, and doesn't have versions. + */ +const desktopAppVersion = isDesktop + ? JSON.parse(fs.readFileSync("../../desktop/package.json", "utf-8")).version + : undefined; + /** * Configuration for the Next.js build * @@ -84,6 +95,7 @@ const nextConfig = { gitSHA, appName, isDesktop, + desktopAppVersion, }, // Customize the webpack configuration used by Next.js. From cc0dea5c342f3df29b4935a0ed93c5f6a539a7d1 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 18 Jul 2024 15:48:26 +0530 Subject: [PATCH 2/3] Use the same source --- web/packages/new/photos/services/ml/index.ts | 1 - web/packages/new/photos/services/ml/worker-types.ts | 1 - web/packages/new/photos/services/ml/worker.ts | 12 +++--------- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/web/packages/new/photos/services/ml/index.ts b/web/packages/new/photos/services/ml/index.ts index 8a28ba7bb7..1be9f1f700 100644 --- a/web/packages/new/photos/services/ml/index.ts +++ b/web/packages/new/photos/services/ml/index.ts @@ -58,7 +58,6 @@ const worker = async () => { const createComlinkWorker = async () => { const electron = ensureElectron(); const mlWorkerElectron = { - appVersion: electron.appVersion, detectFaces: electron.detectFaces, computeFaceEmbeddings: electron.computeFaceEmbeddings, computeCLIPImageEmbedding: electron.computeCLIPImageEmbedding, diff --git a/web/packages/new/photos/services/ml/worker-types.ts b/web/packages/new/photos/services/ml/worker-types.ts index 2e30703844..1eb43933a3 100644 --- a/web/packages/new/photos/services/ml/worker-types.ts +++ b/web/packages/new/photos/services/ml/worker-types.ts @@ -12,7 +12,6 @@ * {@link Electron} that are needed by the code running in the ML web worker. */ export interface MLWorkerElectron { - appVersion: () => Promise; detectFaces: (input: Float32Array) => Promise; computeFaceEmbeddings: (input: Float32Array) => Promise; computeCLIPImageEmbedding: (input: Float32Array) => Promise; diff --git a/web/packages/new/photos/services/ml/worker.ts b/web/packages/new/photos/services/ml/worker.ts index 7b4e70a54d..bd0860b95d 100644 --- a/web/packages/new/photos/services/ml/worker.ts +++ b/web/packages/new/photos/services/ml/worker.ts @@ -69,7 +69,6 @@ interface IndexableItem { export class MLWorker { private electron: MLWorkerElectron | undefined; private delegate: MLWorkerDelegate | undefined; - private userAgent: string | undefined; private state: "idle" | "indexing" = "idle"; private liveQ: IndexableItem[] = []; private idleTimeout: ReturnType | undefined; @@ -91,8 +90,6 @@ export class MLWorker { async init(electron: MLWorkerElectron, delegate?: MLWorkerDelegate) { this.electron = electron; this.delegate = delegate; - // Set the user agent that'll be set in the generated embeddings. - this.userAgent = `${clientPackageName}/${await electron.appVersion()}`; // Initialize the downloadManager running in the web worker with the // user's token. It'll be used to download files to index if needed. await downloadManager.init(await ensureAuthToken()); @@ -181,7 +178,6 @@ export class MLWorker { const allSuccess = await indexNextBatch( items, ensure(this.electron), - ensure(this.userAgent), this.delegate, ); if (allSuccess) { @@ -241,7 +237,6 @@ expose(MLWorker); const indexNextBatch = async ( items: IndexableItem[], electron: MLWorkerElectron, - userAgent: string, delegate: MLWorkerDelegate | undefined, ) => { // Don't try to index if we wouldn't be able to upload them anyway. The @@ -259,7 +254,7 @@ const indexNextBatch = async ( let allSuccess = true; for (const item of items) { try { - await index(item, electron, userAgent); + await index(item, electron); delegate?.workerDidProcessFile(); // Possibly unnecessary, but let us drain the microtask queue. await wait(0); @@ -359,7 +354,6 @@ const syncWithLocalFilesAndGetFilesToIndex = async ( const index = async ( { enteFile, uploadItem, remoteDerivedData }: IndexableItem, electron: MLWorkerElectron, - userAgent: string, ) => { const f = fileLogID(enteFile); const fileID = enteFile.id; @@ -453,13 +447,13 @@ const index = async ( const remoteFaceIndex = existingRemoteFaceIndex ?? { version: faceIndexingVersion, - client: userAgent, + client: clientPackageName, ...faceIndex, }; const remoteCLIPIndex = existingRemoteCLIPIndex ?? { version: clipIndexingVersion, - client: userAgent, + client: clientPackageName, ...clipIndex, }; From 1b039de35d04f31871665d81fa16669d967f37a8 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Thu, 18 Jul 2024 15:49:11 +0530 Subject: [PATCH 3/3] Fix path --- web/packages/next/next.config.base.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/packages/next/next.config.base.js b/web/packages/next/next.config.base.js index f496bcb4e0..ae8d66dcc5 100644 --- a/web/packages/next/next.config.base.js +++ b/web/packages/next/next.config.base.js @@ -72,7 +72,8 @@ const isDesktop = process.env._ENTE_IS_DESKTOP ? "1" : ""; * > The web app has continuous deployments, and doesn't have versions. */ const desktopAppVersion = isDesktop - ? JSON.parse(fs.readFileSync("../../desktop/package.json", "utf-8")).version + ? JSON.parse(fs.readFileSync("../../../desktop/package.json", "utf-8")) + .version : undefined; /**