From 11451efffd52eb53b23af8560a9bb2001835feef Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Apr 2024 17:02:10 +0530 Subject: [PATCH 1/6] Restore macOS icon git checkout 42679bc9daa4108681683079f4cb1f2832f4578c~ -- build/icon.icns --- desktop/build/icon.icns | Bin 0 -> 24644 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 desktop/build/icon.icns diff --git a/desktop/build/icon.icns b/desktop/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..ab7eface7a5ffd4f68c208d5a252a6b09e508d88 GIT binary patch literal 24644 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 Date: Wed, 10 Apr 2024 17:07:11 +0530 Subject: [PATCH 2/6] Remove unnecessary require --- desktop/src/main/init.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desktop/src/main/init.ts b/desktop/src/main/init.ts index c7d8435e81..81a4cf6317 100644 --- a/desktop/src/main/init.ts +++ b/desktop/src/main/init.ts @@ -1,4 +1,4 @@ -import { app, BrowserWindow, nativeImage, Tray } from "electron"; +import { BrowserWindow, Tray, app, nativeImage, shell } from "electron"; import { existsSync } from "node:fs"; import path from "node:path"; import { isAppQuitting, rendererURL } from "../main"; @@ -109,7 +109,7 @@ export function handleDownloads(mainWindow: BrowserWindow) { export function handleExternalLinks(mainWindow: BrowserWindow) { mainWindow.webContents.setWindowOpenHandler(({ url }) => { if (!url.startsWith(rendererURL)) { - require("electron").shell.openExternal(url); + shell.openExternal(url); return { action: "deny" }; } else { return { action: "allow" }; From 008b6d5186964151a713e5b038d1161e2d74fef5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Apr 2024 19:54:06 +0530 Subject: [PATCH 3/6] Spruce dependencies docs --- desktop/docs/dependencies.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 5c1b077449..9cced1f818 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -1,5 +1,9 @@ # Dependencies +* [Electron](#electron) +* [Dev dependencies](#dev) +* [Functionality](#functionality) + ## Electron [Electron](https://www.electronjs.org) is a cross-platform (Linux, Windows, @@ -73,7 +77,7 @@ Electron process. This allows us to directly use the output produced by ## Dev -See [web/docs/dependencies#DX](../../web/docs/dependencies.md#dev) for the +See [web/docs/dependencies#dev](../../web/docs/dependencies.md#dev) for the general development experience related dependencies like TypeScript etc, which are similar to that in the web code. @@ -88,7 +92,7 @@ Some extra ones specific to the code here are: ## Functionality -### Conversion +### Format conversion The main tool we use is for arbitrary conversions is FFMPEG. To bundle a (platform specific) static binary of ffmpeg with our app, we use @@ -104,20 +108,23 @@ resources (`build`) folder. This is used for thumbnail generation on Linux. On macOS, we use the `sips` CLI tool for conversion, but that is already available on the host machine, and is not bundled with our app. +### AI/ML + +[onnxruntime-node](https://github.com/Microsoft/onnxruntime) is used as the +AI/ML runtime. It powers both natural language searches (using CLIP) and face +detection (using YOLO). + +[jpeg-js](https://github.com/jpeg-js/jpeg-js#readme) is used for decoding +JPEG data into raw RGB bytes before passing it to ONNX. + +html-entities is used by the bundled clip-bpe-ts tokenizer for CLIP. + ### Watch Folders [chokidar](https://github.com/paulmillr/chokidar) is used as a file system watcher for the watch folders functionality. -### AI/ML - -- [onnxruntime-node](https://github.com/Microsoft/onnxruntime) is used for - natural language searches based on CLIP. -- html-entities is used by the bundled clip-bpe-ts tokenizer. -- [jpeg-js](https://github.com/jpeg-js/jpeg-js#readme) is used for decoding - JPEG data into raw RGB bytes before passing it to ONNX. - -## ZIP +### ZIP [node-stream-zip](https://github.com/antelle/node-stream-zip) is used for reading of large ZIP files (e.g. during imports of Google Takeout ZIPs). From 8f8d93d11e30325d6deb3884c980a88711631a34 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Apr 2024 20:26:15 +0530 Subject: [PATCH 4/6] Use standard import for jpeg-js --- desktop/src/services/clip.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/src/services/clip.ts b/desktop/src/services/clip.ts index 5de05e6014..535f9312ee 100644 --- a/desktop/src/services/clip.ts +++ b/desktop/src/services/clip.ts @@ -11,6 +11,7 @@ */ import { app, net } from "electron/main"; import { existsSync } from "fs"; +import jpeg from "jpeg-js"; import fs from "node:fs/promises"; import path from "node:path"; import { writeStream } from "../main/fs"; @@ -19,7 +20,6 @@ import { CustomErrors } from "../types/ipc"; import Tokenizer from "../utils/clip-bpe-ts/mod"; import { generateTempFilePath } from "../utils/temp"; import { deleteTempFile } from "./ffmpeg"; -const jpeg = require("jpeg-js"); const ort = require("onnxruntime-node"); const textModelName = "clip-text-vit-32-uint8.onnx"; From 2da9565dcbd38c43c2594568ae95c9c08a39b1f0 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Apr 2024 20:43:57 +0530 Subject: [PATCH 5/6] Rearrange files --- desktop/src/main.ts | 4 +- desktop/src/main/dialogs.ts | 4 +- desktop/src/main/init.ts | 6 +- desktop/src/main/ipc.ts | 62 +++++++++---------- desktop/src/main/menu.ts | 6 +- .../src/{utils/common => main}/platform.ts | 0 desktop/src/{ => main}/services/app-update.ts | 6 +- .../src/{ => main}/services/autoLauncher.ts | 4 +- .../linuxAndWinAutoLauncher.ts | 2 +- .../autoLauncherClients/macAutoLauncher.ts | 2 +- desktop/src/{ => main}/services/chokidar.ts | 4 +- desktop/src/{ => main}/services/clip.ts | 10 +-- desktop/src/{ => main}/services/ffmpeg.ts | 10 +-- desktop/src/{ => main}/services/fs.ts | 4 +- .../src/{ => main}/services/imageProcessor.ts | 12 ++-- desktop/src/{ => main}/services/store.ts | 0 desktop/src/{ => main}/services/upload.ts | 7 +-- .../src/{ => main}/services/userPreference.ts | 0 desktop/src/{ => main}/services/watch.ts | 2 +- desktop/src/{ => main}/stores/keys.store.ts | 2 +- .../{ => main}/stores/safeStorage.store.ts | 2 +- desktop/src/{ => main}/stores/upload.store.ts | 2 +- .../src/{ => main}/stores/user-preferences.ts | 0 desktop/src/{ => main}/stores/watch.store.ts | 2 +- desktop/src/{utils => main}/temp.ts | 0 .../{ => main}/types/any-shell-escape.d.ts | 0 .../{utils => thirdparty}/clip-bpe-ts/LICENSE | 0 .../clip-bpe-ts/README.md | 0 .../clip-bpe-ts/bpe_simple_vocab_16e6.ts | 0 .../{utils => thirdparty}/clip-bpe-ts/mod.ts | 0 30 files changed, 76 insertions(+), 77 deletions(-) rename desktop/src/{utils/common => main}/platform.ts (100%) rename desktop/src/{ => main}/services/app-update.ts (95%) rename desktop/src/{ => main}/services/autoLauncher.ts (91%) rename desktop/src/{ => main}/services/autoLauncherClients/linuxAndWinAutoLauncher.ts (94%) rename desktop/src/{ => main}/services/autoLauncherClients/macAutoLauncher.ts (92%) rename desktop/src/{ => main}/services/chokidar.ts (93%) rename desktop/src/{ => main}/services/clip.ts (97%) rename desktop/src/{ => main}/services/ffmpeg.ts (95%) rename desktop/src/{ => main}/services/fs.ts (98%) rename desktop/src/{ => main}/services/imageProcessor.ts (96%) rename desktop/src/{ => main}/services/store.ts (100%) rename desktop/src/{ => main}/services/upload.ts (93%) rename desktop/src/{ => main}/services/userPreference.ts (100%) rename desktop/src/{ => main}/services/watch.ts (97%) rename desktop/src/{ => main}/stores/keys.store.ts (86%) rename desktop/src/{ => main}/stores/safeStorage.store.ts (81%) rename desktop/src/{ => main}/stores/upload.store.ts (89%) rename desktop/src/{ => main}/stores/user-preferences.ts (100%) rename desktop/src/{ => main}/stores/watch.store.ts (96%) rename desktop/src/{utils => main}/temp.ts (100%) rename desktop/src/{ => main}/types/any-shell-escape.d.ts (100%) rename desktop/src/{utils => thirdparty}/clip-bpe-ts/LICENSE (100%) rename desktop/src/{utils => thirdparty}/clip-bpe-ts/README.md (100%) rename desktop/src/{utils => thirdparty}/clip-bpe-ts/bpe_simple_vocab_16e6.ts (100%) rename desktop/src/{utils => thirdparty}/clip-bpe-ts/mod.ts (100%) diff --git a/desktop/src/main.ts b/desktop/src/main.ts index b1e89b40c6..68b2cc51cc 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -26,9 +26,9 @@ import { import { attachFSWatchIPCHandlers, attachIPCHandlers } from "./main/ipc"; import log, { initLogging } from "./main/log"; import { createApplicationMenu } from "./main/menu"; +import { setupAutoUpdater } from "./main/services/app-update"; +import { initWatcher } from "./main/services/chokidar"; import { isDev } from "./main/util"; -import { setupAutoUpdater } from "./services/app-update"; -import { initWatcher } from "./services/chokidar"; let appIsQuitting = false; diff --git a/desktop/src/main/dialogs.ts b/desktop/src/main/dialogs.ts index 5f18878b51..2f91f5c400 100644 --- a/desktop/src/main/dialogs.ts +++ b/desktop/src/main/dialogs.ts @@ -1,8 +1,8 @@ import { dialog } from "electron/main"; import path from "node:path"; -import { getDirFilePaths, getElectronFile } from "../services/fs"; -import { getElectronFilesFromGoogleZip } from "../services/upload"; import type { ElectronFile } from "../types/ipc"; +import { getDirFilePaths, getElectronFile } from "./services/fs"; +import { getElectronFilesFromGoogleZip } from "./services/upload"; export const selectDirectory = async () => { const result = await dialog.showOpenDialog({ diff --git a/desktop/src/main/init.ts b/desktop/src/main/init.ts index 81a4cf6317..2bea075a33 100644 --- a/desktop/src/main/init.ts +++ b/desktop/src/main/init.ts @@ -2,11 +2,11 @@ import { BrowserWindow, Tray, app, nativeImage, shell } from "electron"; import { existsSync } from "node:fs"; import path from "node:path"; import { isAppQuitting, rendererURL } from "../main"; -import autoLauncher from "../services/autoLauncher"; -import { getHideDockIconPreference } from "../services/userPreference"; -import { isPlatform } from "../utils/common/platform"; import log from "./log"; import { createTrayContextMenu } from "./menu"; +import { isPlatform } from "./platform"; +import autoLauncher from "./services/autoLauncher"; +import { getHideDockIconPreference } from "./services/userPreference"; import { isDev } from "./util"; /** diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index ecb3e20106..2b328bb986 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -10,37 +10,6 @@ import type { FSWatcher } from "chokidar"; import { ipcMain } from "electron/main"; -import { - appVersion, - skipAppUpdate, - updateAndRestart, - updateOnNextRestart, -} from "../services/app-update"; -import { clipImageEmbedding, clipTextEmbedding } from "../services/clip"; -import { runFFmpegCmd } from "../services/ffmpeg"; -import { getDirFiles } from "../services/fs"; -import { - convertToJPEG, - generateImageThumbnail, -} from "../services/imageProcessor"; -import { - clearStores, - encryptionKey, - saveEncryptionKey, -} from "../services/store"; -import { - getElectronFilesFromGoogleZip, - getPendingUploads, - setToUploadCollection, - setToUploadFiles, -} from "../services/upload"; -import { - addWatchMapping, - getWatchMappings, - removeWatchMapping, - updateWatchMappingIgnoredFiles, - updateWatchMappingSyncedFiles, -} from "../services/watch"; import type { ElectronFile, FILE_PATH_TYPE, WatchMapping } from "../types/ipc"; import { selectDirectory, @@ -61,6 +30,37 @@ import { saveStreamToDisk, } from "./fs"; import { logToDisk } from "./log"; +import { + appVersion, + skipAppUpdate, + updateAndRestart, + updateOnNextRestart, +} from "./services/app-update"; +import { clipImageEmbedding, clipTextEmbedding } from "./services/clip"; +import { runFFmpegCmd } from "./services/ffmpeg"; +import { getDirFiles } from "./services/fs"; +import { + convertToJPEG, + generateImageThumbnail, +} from "./services/imageProcessor"; +import { + clearStores, + encryptionKey, + saveEncryptionKey, +} from "./services/store"; +import { + getElectronFilesFromGoogleZip, + getPendingUploads, + setToUploadCollection, + setToUploadFiles, +} from "./services/upload"; +import { + addWatchMapping, + getWatchMappings, + removeWatchMapping, + updateWatchMappingIgnoredFiles, + updateWatchMappingSyncedFiles, +} from "./services/watch"; import { openDirectory, openLogDirectory } from "./util"; /** diff --git a/desktop/src/main/menu.ts b/desktop/src/main/menu.ts index f6b37e9b00..7801e77aec 100644 --- a/desktop/src/main/menu.ts +++ b/desktop/src/main/menu.ts @@ -6,12 +6,12 @@ import { shell, } from "electron"; import { setIsAppQuitting } from "../main"; -import { forceCheckForAppUpdates } from "../services/app-update"; -import autoLauncher from "../services/autoLauncher"; +import { forceCheckForAppUpdates } from "./services/app-update"; +import autoLauncher from "./services/autoLauncher"; import { getHideDockIconPreference, setHideDockIconPreference, -} from "../services/userPreference"; +} from "./services/userPreference"; import { openLogDirectory } from "./util"; /** Create and return the entries in the app's main menu bar */ diff --git a/desktop/src/utils/common/platform.ts b/desktop/src/main/platform.ts similarity index 100% rename from desktop/src/utils/common/platform.ts rename to desktop/src/main/platform.ts diff --git a/desktop/src/services/app-update.ts b/desktop/src/main/services/app-update.ts similarity index 95% rename from desktop/src/services/app-update.ts rename to desktop/src/main/services/app-update.ts index 507ef3e644..272a1ca6c6 100644 --- a/desktop/src/services/app-update.ts +++ b/desktop/src/main/services/app-update.ts @@ -2,10 +2,10 @@ import { compareVersions } from "compare-versions"; import { app, BrowserWindow } from "electron"; import { default as electronLog } from "electron-log"; import { autoUpdater } from "electron-updater"; -import { setIsAppQuitting, setIsUpdateAvailable } from "../main"; -import log from "../main/log"; +import { setIsAppQuitting, setIsUpdateAvailable } from "../../main"; +import { AppUpdateInfo } from "../../types/ipc"; +import log from "../log"; import { userPreferencesStore } from "../stores/user-preferences"; -import { AppUpdateInfo } from "../types/ipc"; export const setupAutoUpdater = (mainWindow: BrowserWindow) => { autoUpdater.logger = electronLog; diff --git a/desktop/src/services/autoLauncher.ts b/desktop/src/main/services/autoLauncher.ts similarity index 91% rename from desktop/src/services/autoLauncher.ts rename to desktop/src/main/services/autoLauncher.ts index bc1270ac97..614c151bac 100644 --- a/desktop/src/services/autoLauncher.ts +++ b/desktop/src/main/services/autoLauncher.ts @@ -1,5 +1,5 @@ -import { AutoLauncherClient } from "../types/main"; -import { isPlatform } from "../utils/common/platform"; +import { AutoLauncherClient } from "../../types/main"; +import { isPlatform } from "../platform"; import linuxAndWinAutoLauncher from "./autoLauncherClients/linuxAndWinAutoLauncher"; import macAutoLauncher from "./autoLauncherClients/macAutoLauncher"; diff --git a/desktop/src/services/autoLauncherClients/linuxAndWinAutoLauncher.ts b/desktop/src/main/services/autoLauncherClients/linuxAndWinAutoLauncher.ts similarity index 94% rename from desktop/src/services/autoLauncherClients/linuxAndWinAutoLauncher.ts rename to desktop/src/main/services/autoLauncherClients/linuxAndWinAutoLauncher.ts index 761b58a067..0d2c1bb427 100644 --- a/desktop/src/services/autoLauncherClients/linuxAndWinAutoLauncher.ts +++ b/desktop/src/main/services/autoLauncherClients/linuxAndWinAutoLauncher.ts @@ -1,6 +1,6 @@ import AutoLaunch from "auto-launch"; import { app } from "electron"; -import { AutoLauncherClient } from "../../types/main"; +import { AutoLauncherClient } from "../../../types/main"; const LAUNCHED_AS_HIDDEN_FLAG = "hidden"; diff --git a/desktop/src/services/autoLauncherClients/macAutoLauncher.ts b/desktop/src/main/services/autoLauncherClients/macAutoLauncher.ts similarity index 92% rename from desktop/src/services/autoLauncherClients/macAutoLauncher.ts rename to desktop/src/main/services/autoLauncherClients/macAutoLauncher.ts index d4fc343b03..00320e870f 100644 --- a/desktop/src/services/autoLauncherClients/macAutoLauncher.ts +++ b/desktop/src/main/services/autoLauncherClients/macAutoLauncher.ts @@ -1,5 +1,5 @@ import { app } from "electron"; -import { AutoLauncherClient } from "../../types/main"; +import { AutoLauncherClient } from "../../../types/main"; class MacAutoLauncher implements AutoLauncherClient { async isEnabled() { diff --git a/desktop/src/services/chokidar.ts b/desktop/src/main/services/chokidar.ts similarity index 93% rename from desktop/src/services/chokidar.ts rename to desktop/src/main/services/chokidar.ts index cef386ea3b..5d7284d2a2 100644 --- a/desktop/src/services/chokidar.ts +++ b/desktop/src/main/services/chokidar.ts @@ -1,9 +1,9 @@ import chokidar from "chokidar"; import { BrowserWindow } from "electron"; import path from "path"; -import log from "../main/log"; -import { getWatchMappings } from "../services/watch"; +import log from "../log"; import { getElectronFile } from "./fs"; +import { getWatchMappings } from "./watch"; /** * Convert a file system {@link filePath} that uses the local system specific diff --git a/desktop/src/services/clip.ts b/desktop/src/main/services/clip.ts similarity index 97% rename from desktop/src/services/clip.ts rename to desktop/src/main/services/clip.ts index 535f9312ee..0ef6053183 100644 --- a/desktop/src/services/clip.ts +++ b/desktop/src/main/services/clip.ts @@ -14,11 +14,11 @@ import { existsSync } from "fs"; import jpeg from "jpeg-js"; import fs from "node:fs/promises"; import path from "node:path"; -import { writeStream } from "../main/fs"; -import log from "../main/log"; -import { CustomErrors } from "../types/ipc"; -import Tokenizer from "../utils/clip-bpe-ts/mod"; -import { generateTempFilePath } from "../utils/temp"; +import { CustomErrors } from "../../types/ipc"; +import Tokenizer from "../../thirdparty/clip-bpe-ts/mod"; +import { writeStream } from "../fs"; +import log from "../log"; +import { generateTempFilePath } from "../temp"; import { deleteTempFile } from "./ffmpeg"; const ort = require("onnxruntime-node"); diff --git a/desktop/src/services/ffmpeg.ts b/desktop/src/main/services/ffmpeg.ts similarity index 95% rename from desktop/src/services/ffmpeg.ts rename to desktop/src/main/services/ffmpeg.ts index 468034046f..e9639a26f8 100644 --- a/desktop/src/services/ffmpeg.ts +++ b/desktop/src/main/services/ffmpeg.ts @@ -1,11 +1,11 @@ import pathToFfmpeg from "ffmpeg-static"; import { existsSync } from "node:fs"; import fs from "node:fs/promises"; -import { writeStream } from "../main/fs"; -import log from "../main/log"; -import { execAsync } from "../main/util"; -import { ElectronFile } from "../types/ipc"; -import { generateTempFilePath, getTempDirPath } from "../utils/temp"; +import { ElectronFile } from "../../types/ipc"; +import { writeStream } from "../fs"; +import log from "../log"; +import { generateTempFilePath, getTempDirPath } from "../temp"; +import { execAsync } from "../util"; const INPUT_PATH_PLACEHOLDER = "INPUT"; const FFMPEG_PLACEHOLDER = "FFMPEG"; diff --git a/desktop/src/services/fs.ts b/desktop/src/main/services/fs.ts similarity index 98% rename from desktop/src/services/fs.ts rename to desktop/src/main/services/fs.ts index 5a8fb265cf..7a29d581b9 100644 --- a/desktop/src/services/fs.ts +++ b/desktop/src/main/services/fs.ts @@ -2,8 +2,8 @@ import StreamZip from "node-stream-zip"; import { existsSync } from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; -import log from "../main/log"; -import { ElectronFile } from "../types/ipc"; +import { ElectronFile } from "../../types/ipc"; +import log from "../log"; const FILE_STREAM_CHUNK_SIZE: number = 4 * 1024 * 1024; diff --git a/desktop/src/services/imageProcessor.ts b/desktop/src/main/services/imageProcessor.ts similarity index 96% rename from desktop/src/services/imageProcessor.ts rename to desktop/src/main/services/imageProcessor.ts index 8f81ba2870..890e0e6347 100644 --- a/desktop/src/services/imageProcessor.ts +++ b/desktop/src/main/services/imageProcessor.ts @@ -1,12 +1,12 @@ import { existsSync } from "fs"; import fs from "node:fs/promises"; import path from "path"; -import { writeStream } from "../main/fs"; -import log from "../main/log"; -import { execAsync, isDev } from "../main/util"; -import { CustomErrors, ElectronFile } from "../types/ipc"; -import { isPlatform } from "../utils/common/platform"; -import { generateTempFilePath } from "../utils/temp"; +import { CustomErrors, ElectronFile } from "../../types/ipc"; +import { writeStream } from "../fs"; +import log from "../log"; +import { isPlatform } from "../platform"; +import { generateTempFilePath } from "../temp"; +import { execAsync, isDev } from "../util"; import { deleteTempFile } from "./ffmpeg"; const IMAGE_MAGICK_PLACEHOLDER = "IMAGE_MAGICK"; diff --git a/desktop/src/services/store.ts b/desktop/src/main/services/store.ts similarity index 100% rename from desktop/src/services/store.ts rename to desktop/src/main/services/store.ts diff --git a/desktop/src/services/upload.ts b/desktop/src/main/services/upload.ts similarity index 93% rename from desktop/src/services/upload.ts rename to desktop/src/main/services/upload.ts index ae51e82180..e3fbc16e62 100644 --- a/desktop/src/services/upload.ts +++ b/desktop/src/main/services/upload.ts @@ -1,10 +1,9 @@ import StreamZip from "node-stream-zip"; import path from "path"; -import { getElectronFile } from "../services/fs"; +import { ElectronFile, FILE_PATH_TYPE } from "../../types/ipc"; +import { FILE_PATH_KEYS } from "../../types/main"; import { uploadStatusStore } from "../stores/upload.store"; -import { ElectronFile, FILE_PATH_TYPE } from "../types/ipc"; -import { FILE_PATH_KEYS } from "../types/main"; -import { getValidPaths, getZipFileStream } from "./fs"; +import { getElectronFile, getValidPaths, getZipFileStream } from "./fs"; export const getPendingUploads = async () => { const filePaths = getSavedFilePaths(FILE_PATH_TYPE.FILES); diff --git a/desktop/src/services/userPreference.ts b/desktop/src/main/services/userPreference.ts similarity index 100% rename from desktop/src/services/userPreference.ts rename to desktop/src/main/services/userPreference.ts diff --git a/desktop/src/services/watch.ts b/desktop/src/main/services/watch.ts similarity index 97% rename from desktop/src/services/watch.ts rename to desktop/src/main/services/watch.ts index 59ef842f7a..8a3414c58c 100644 --- a/desktop/src/services/watch.ts +++ b/desktop/src/main/services/watch.ts @@ -1,7 +1,7 @@ import type { FSWatcher } from "chokidar"; import ElectronLog from "electron-log"; +import { WatchMapping, WatchStoreType } from "../../types/ipc"; import { watchStore } from "../stores/watch.store"; -import { WatchMapping, WatchStoreType } from "../types/ipc"; export const addWatchMapping = async ( watcher: FSWatcher, diff --git a/desktop/src/stores/keys.store.ts b/desktop/src/main/stores/keys.store.ts similarity index 86% rename from desktop/src/stores/keys.store.ts rename to desktop/src/main/stores/keys.store.ts index d112f045a5..4f8618cea8 100644 --- a/desktop/src/stores/keys.store.ts +++ b/desktop/src/main/stores/keys.store.ts @@ -1,5 +1,5 @@ import Store, { Schema } from "electron-store"; -import type { KeysStoreType } from "../types/main"; +import type { KeysStoreType } from "../../types/main"; const keysStoreSchema: Schema = { AnonymizeUserID: { diff --git a/desktop/src/stores/safeStorage.store.ts b/desktop/src/main/stores/safeStorage.store.ts similarity index 81% rename from desktop/src/stores/safeStorage.store.ts rename to desktop/src/main/stores/safeStorage.store.ts index 809c9623f2..da95df3be0 100644 --- a/desktop/src/stores/safeStorage.store.ts +++ b/desktop/src/main/stores/safeStorage.store.ts @@ -1,5 +1,5 @@ import Store, { Schema } from "electron-store"; -import type { SafeStorageStoreType } from "../types/main"; +import type { SafeStorageStoreType } from "../../types/main"; const safeStorageSchema: Schema = { encryptionKey: { diff --git a/desktop/src/stores/upload.store.ts b/desktop/src/main/stores/upload.store.ts similarity index 89% rename from desktop/src/stores/upload.store.ts rename to desktop/src/main/stores/upload.store.ts index 5ede1fb99f..20b1f419d5 100644 --- a/desktop/src/stores/upload.store.ts +++ b/desktop/src/main/stores/upload.store.ts @@ -1,5 +1,5 @@ import Store, { Schema } from "electron-store"; -import type { UploadStoreType } from "../types/main"; +import type { UploadStoreType } from "../../types/main"; const uploadStoreSchema: Schema = { filePaths: { diff --git a/desktop/src/stores/user-preferences.ts b/desktop/src/main/stores/user-preferences.ts similarity index 100% rename from desktop/src/stores/user-preferences.ts rename to desktop/src/main/stores/user-preferences.ts diff --git a/desktop/src/stores/watch.store.ts b/desktop/src/main/stores/watch.store.ts similarity index 96% rename from desktop/src/stores/watch.store.ts rename to desktop/src/main/stores/watch.store.ts index cbc71dde73..55470ce868 100644 --- a/desktop/src/stores/watch.store.ts +++ b/desktop/src/main/stores/watch.store.ts @@ -1,5 +1,5 @@ import Store, { Schema } from "electron-store"; -import { WatchStoreType } from "../types/ipc"; +import { WatchStoreType } from "../../types/ipc"; const watchStoreSchema: Schema = { mappings: { diff --git a/desktop/src/utils/temp.ts b/desktop/src/main/temp.ts similarity index 100% rename from desktop/src/utils/temp.ts rename to desktop/src/main/temp.ts diff --git a/desktop/src/types/any-shell-escape.d.ts b/desktop/src/main/types/any-shell-escape.d.ts similarity index 100% rename from desktop/src/types/any-shell-escape.d.ts rename to desktop/src/main/types/any-shell-escape.d.ts diff --git a/desktop/src/utils/clip-bpe-ts/LICENSE b/desktop/src/thirdparty/clip-bpe-ts/LICENSE similarity index 100% rename from desktop/src/utils/clip-bpe-ts/LICENSE rename to desktop/src/thirdparty/clip-bpe-ts/LICENSE diff --git a/desktop/src/utils/clip-bpe-ts/README.md b/desktop/src/thirdparty/clip-bpe-ts/README.md similarity index 100% rename from desktop/src/utils/clip-bpe-ts/README.md rename to desktop/src/thirdparty/clip-bpe-ts/README.md diff --git a/desktop/src/utils/clip-bpe-ts/bpe_simple_vocab_16e6.ts b/desktop/src/thirdparty/clip-bpe-ts/bpe_simple_vocab_16e6.ts similarity index 100% rename from desktop/src/utils/clip-bpe-ts/bpe_simple_vocab_16e6.ts rename to desktop/src/thirdparty/clip-bpe-ts/bpe_simple_vocab_16e6.ts diff --git a/desktop/src/utils/clip-bpe-ts/mod.ts b/desktop/src/thirdparty/clip-bpe-ts/mod.ts similarity index 100% rename from desktop/src/utils/clip-bpe-ts/mod.ts rename to desktop/src/thirdparty/clip-bpe-ts/mod.ts From 500022d4b99736b0d13b6d20dafb474342176a3a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 10 Apr 2024 21:01:30 +0530 Subject: [PATCH 6/6] Import onnxruntime with TypeScript types Refs: - https://github.com/microsoft/onnxruntime/issues/17979 --- desktop/src/main/services/clip.ts | 4 ++-- desktop/src/main/types/onnx-runtime.d.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 desktop/src/main/types/onnx-runtime.d.ts diff --git a/desktop/src/main/services/clip.ts b/desktop/src/main/services/clip.ts index 0ef6053183..525e613424 100644 --- a/desktop/src/main/services/clip.ts +++ b/desktop/src/main/services/clip.ts @@ -14,13 +14,13 @@ import { existsSync } from "fs"; import jpeg from "jpeg-js"; import fs from "node:fs/promises"; import path from "node:path"; -import { CustomErrors } from "../../types/ipc"; +import * as ort from "onnxruntime-node"; import Tokenizer from "../../thirdparty/clip-bpe-ts/mod"; +import { CustomErrors } from "../../types/ipc"; import { writeStream } from "../fs"; import log from "../log"; import { generateTempFilePath } from "../temp"; import { deleteTempFile } from "./ffmpeg"; -const ort = require("onnxruntime-node"); const textModelName = "clip-text-vit-32-uint8.onnx"; const textModelByteSize = 64173509; // 61.2 MB diff --git a/desktop/src/main/types/onnx-runtime.d.ts b/desktop/src/main/types/onnx-runtime.d.ts new file mode 100644 index 0000000000..85fc00ab6f --- /dev/null +++ b/desktop/src/main/types/onnx-runtime.d.ts @@ -0,0 +1,9 @@ +/** + * Types for [onnxruntime-node](https://onnxruntime.ai/docs/api/js/index.html). + * + * Note: these are not the official types but are based on a temporary + * [workaround](https://github.com/microsoft/onnxruntime/issues/17979). + */ +declare module "onnxruntime-node" { + export * from "onnxruntime-common"; +}