diff --git a/web/apps/photos/src/services/face/indexer.ts b/web/apps/photos/src/services/face/indexer.ts index 41d3fefd7d..509037e101 100644 --- a/web/apps/photos/src/services/face/indexer.ts +++ b/web/apps/photos/src/services/face/indexer.ts @@ -221,9 +221,12 @@ export const setIsFaceIndexingEnabled = async (enabled: boolean) => { else localStorage.removeItem("faceIndexingEnabled"); }; +export type IndexableEnteFile = { enteFile: EnteFile; isHidden: boolean }; + /** * Sync face DB with the local indexable files that we know about. Then return - * the next {@link count} files that still need to be indexed. + * the next {@link count} files that still need to be indexed alongwith a flag + * for whether they are currently hidden. * * For more specifics of what a "sync" entails, see * {@link syncWithLocalFiles}. @@ -232,7 +235,10 @@ export const setIsFaceIndexingEnabled = async (enabled: boolean) => { * * @param count Limit the resulting list of files to {@link count}. */ -export const syncAndGetFilesToIndex = async (userID: number, count: number) => { +export const syncAndGetFilesToIndex = async ( + userID: number, + count: number, +): Promise => { const indexableTypes = [FILE_TYPE.IMAGE, FILE_TYPE.LIVE_PHOTO]; const isIndexable = (f: EnteFile) => f.ownerID == userID && indexableTypes.includes(f.metadata.fileType); @@ -253,10 +259,12 @@ export const syncAndGetFilesToIndex = async (userID: number, count: number) => { ); const fileIDsToIndex = await indexableFileIDs(count); - return fileIDsToIndex.map((id) => - ensure( - indexableNormalFilesByID.get(id) ?? - indexableHiddenFilesByID.get(id), - ), - ); + return fileIDsToIndex.map((id) => { + const f = indexableNormalFilesByID.get(id); + if (f) return { enteFile: f, isHidden: false }; + return { + enteFile: ensure(indexableHiddenFilesByID.get(id)), + isHidden: true, + }; + }); }; diff --git a/web/apps/photos/src/services/machineLearning/machineLearningService.ts b/web/apps/photos/src/services/machineLearning/machineLearningService.ts index b4536d2b46..2b16b7b255 100644 --- a/web/apps/photos/src/services/machineLearning/machineLearningService.ts +++ b/web/apps/photos/src/services/machineLearning/machineLearningService.ts @@ -1,7 +1,10 @@ import log from "@/next/log"; import { CustomError, parseUploadErrorCodes } from "@ente/shared/error"; import PQueue from "p-queue"; -import { syncAndGetFilesToIndex } from "services/face/indexer"; +import { + syncAndGetFilesToIndex, + type IndexableEnteFile, +} from "services/face/indexer"; import { FaceIndexerWorker } from "services/face/indexer.worker"; import { EnteFile } from "types/file"; @@ -13,7 +16,7 @@ class MLSyncContext { public userAgent: string; public localFilesMap: Map; - public outOfSyncFiles: EnteFile[]; + public outOfSyncFiles: IndexableEnteFile[]; public nSyncedFiles: number; public error?: Error; @@ -138,12 +141,18 @@ class MachineLearningService { } public async syncLocalFile( + // eslint-disable-next-line @typescript-eslint/no-unused-vars token: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars userID: number, + // eslint-disable-next-line @typescript-eslint/no-unused-vars userAgent: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars enteFile: EnteFile, + // eslint-disable-next-line @typescript-eslint/no-unused-vars localFile?: globalThis.File, ) { + /* TODO-ML(MR): Currently not used const syncContext = await this.getLocalSyncContext( token, userID, @@ -164,15 +173,21 @@ class MachineLearningService { } catch (e) { console.error("Error while syncing local file: ", enteFile.id, e); } + */ } private async syncFileWithErrorHandler( syncContext: MLSyncContext, - enteFile: EnteFile, + { enteFile, isHidden }: IndexableEnteFile, localFile?: globalThis.File, ) { try { - await this.syncFile(enteFile, localFile, syncContext.userAgent); + await this.syncFile( + enteFile, + localFile, + isHidden, + syncContext.userAgent, + ); syncContext.nSyncedFiles += 1; } catch (e) { let error = e; @@ -197,11 +212,12 @@ class MachineLearningService { private async syncFile( enteFile: EnteFile, file: File | undefined, + isHidden: boolean, userAgent: string, ) { const worker = new FaceIndexerWorker(); - await worker.index(enteFile, file, userAgent); + await worker.index(enteFile, file, isHidden, userAgent); } }