From 3aeb6434b8d65f5540778ceff311c63d6683d933 Mon Sep 17 00:00:00 2001 From: hiento09 <136591877+hiento09@users.noreply.github.com> Date: Mon, 11 Mar 2024 13:02:54 +0700 Subject: [PATCH 1/5] codesign script force sign (#2291) Co-authored-by: Hien To --- .github/scripts/auto-sign.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/scripts/auto-sign.sh b/.github/scripts/auto-sign.sh index a2130e791..e7ea49d40 100755 --- a/.github/scripts/auto-sign.sh +++ b/.github/scripts/auto-sign.sh @@ -7,6 +7,6 @@ if [[ -z "$APP_PATH" ]] || [[ -z "$DEVELOPER_ID" ]]; then fi # If both variables are set, execute the following commands -find "$APP_PATH" \( -type f -perm +111 -o -name "*.node" \) -exec codesign -s "$DEVELOPER_ID" --options=runtime {} \; +find "$APP_PATH" \( -type f -perm +111 -o -name "*.node" \) -exec codesign --force -s "$DEVELOPER_ID" --options=runtime {} \; -find "$APP_PATH" -type f -name "*.o" -exec codesign -s "$DEVELOPER_ID" --options=runtime {} \; +find "$APP_PATH" -type f -name "*.o" -exec codesign --force -s "$DEVELOPER_ID" --options=runtime {} \; From 15064ac12539b9054847574420a070d4e7907d4a Mon Sep 17 00:00:00 2001 From: Service Account Date: Mon, 11 Mar 2024 06:17:51 +0000 Subject: [PATCH 2/5] janhq/jan: Update README.md with nightly build artifact URL --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8a4c03098..dd9b05088 100644 --- a/README.md +++ b/README.md @@ -76,31 +76,31 @@ Jan is an open-source ChatGPT alternative that runs 100% offline on your compute Experimental (Nightly Build) - + jan.exe - + Intel - + M1/M2 - + jan.deb - + jan.AppImage From 1474a28dea28ca7df94a50a61f1640698eabf843 Mon Sep 17 00:00:00 2001 From: Service Account Date: Mon, 11 Mar 2024 06:35:11 +0000 Subject: [PATCH 3/5] Update README.md with Stable Download URLs --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dd9b05088..43b43b3e2 100644 --- a/README.md +++ b/README.md @@ -43,31 +43,31 @@ Jan is an open-source ChatGPT alternative that runs 100% offline on your compute Stable (Recommended) - + jan.exe - + Intel - + M1/M2 - + jan.deb - + jan.AppImage From 1ce3f1158d48545e99477430fa45bb4b2682881e Mon Sep 17 00:00:00 2001 From: Service Account Date: Mon, 11 Mar 2024 09:44:33 +0000 Subject: [PATCH 4/5] janhq/jan: Update README.md with nightly build artifact URL --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 43b43b3e2..f847d63d2 100644 --- a/README.md +++ b/README.md @@ -76,31 +76,31 @@ Jan is an open-source ChatGPT alternative that runs 100% offline on your compute Experimental (Nightly Build) - + jan.exe - + Intel - + M1/M2 - + jan.deb - + jan.AppImage From 1fac400d70400dc7aea60491b259298b308f2f30 Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 11 Mar 2024 20:30:32 +0700 Subject: [PATCH 5/5] fix: replace robotjs by nutjs (#2295) (#2302) * fix: replace robotjs by nutjs (#2295) * fix: do not create quick ask window on test --- electron/main.ts | 24 +++-------------------- electron/package.json | 3 +-- electron/utils/selectedText.ts | 35 +++++++++++++++++++--------------- electron/utils/tray.ts | 24 +++++++++++++++++++++++ 4 files changed, 48 insertions(+), 38 deletions(-) create mode 100644 electron/utils/tray.ts diff --git a/electron/main.ts b/electron/main.ts index 21f95cd00..8fe4247d6 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -27,6 +27,7 @@ import { setupReactDevTool } from './utils/dev' import { cleanLogs } from './utils/log' import { registerShortcut } from './utils/selectedText' +import { createSystemTray } from './utils/tray' const preloadPath = join(__dirname, 'preload.js') const rendererPath = join(__dirname, '..', 'renderer') @@ -48,33 +49,14 @@ app .then(setupMenu) .then(handleIPCs) .then(handleAppUpdates) - .then(createQuickAskWindow) + .then(() => process.env.CI !== 'e2e' && createQuickAskWindow()) .then(createMainWindow) .then(() => { if (!app.isPackaged) { windowManager.mainWindow?.webContents.openDevTools() } }) - .then(() => { - const iconPath = join(app.getAppPath(), 'icons', 'icon-tray.png') - const tray = new Tray(iconPath) - tray.setToolTip(app.getName()) - - const contextMenu = Menu.buildFromTemplate([ - { - label: 'Open Jan', - type: 'normal', - click: () => windowManager.showMainWindow(), - }, - { - label: 'Open Quick Ask', - type: 'normal', - click: () => windowManager.showQuickAskWindow(), - }, - { label: 'Quit', type: 'normal', click: () => app.quit() }, - ]) - tray.setContextMenu(contextMenu) - }) + .then(() => process.env.CI !== 'e2e' && createSystemTray()) .then(() => { log(`Version: ${app.getVersion()}`) }) diff --git a/electron/package.json b/electron/package.json index 93c30682c..e09e0daf2 100644 --- a/electron/package.json +++ b/electron/package.json @@ -41,7 +41,6 @@ "notarize": { "teamId": "F8AH6NHVY5" }, - "icon": "icons/icon.png" }, "linux": { @@ -92,7 +91,7 @@ "request": "^2.88.2", "request-progress": "^3.0.0", "ulid": "^2.3.0", - "@hurdlegroup/robotjs": "^0.11.4" + "@nut-tree/nut-js": "^4.0.0" }, "devDependencies": { "@electron/notarize": "^2.1.0", diff --git a/electron/utils/selectedText.ts b/electron/utils/selectedText.ts index 6b2349725..a39e331a9 100644 --- a/electron/utils/selectedText.ts +++ b/electron/utils/selectedText.ts @@ -1,19 +1,24 @@ -import { clipboard, globalShortcut } from "electron"; -import { keyTap, keys } from "@hurdlegroup/robotjs"; +import { clipboard, globalShortcut } from 'electron' +import { keyboard, Key } from '@nut-tree/nut-js' /** * Gets selected text by synthesizing the keyboard shortcut * "CommandOrControl+c" then reading text from the clipboard */ export const getSelectedText = async () => { - const currentClipboardContent = clipboard.readText(); // preserve clipboard content - clipboard.clear(); - keyTap("c" as keys, process.platform === "darwin" ? "command" : "control"); - await new Promise((resolve) => setTimeout(resolve, 200)); // add a delay before checking clipboard - const selectedText = clipboard.readText(); - clipboard.writeText(currentClipboardContent); - return selectedText; -}; + const currentClipboardContent = clipboard.readText() // preserve clipboard content + clipboard.clear() + const hotkeys: Key[] = [ + process.platform === 'darwin' ? Key.LeftCmd : Key.LeftControl, + Key.C, + ] + await keyboard.pressKey(...hotkeys) + await keyboard.releaseKey(...hotkeys) + await new Promise((resolve) => setTimeout(resolve, 200)) // add a delay before checking clipboard + const selectedText = clipboard.readText() + clipboard.writeText(currentClipboardContent) + return selectedText +} /** * Registers a global shortcut of `accelerator`. The `callback` is called @@ -26,14 +31,14 @@ export const registerShortcut = ( callback: (selectedText: string) => void ) => { return globalShortcut.register(accelerator, async () => { - callback(await getSelectedText()); - }); -}; + callback(await getSelectedText()) + }) +} /** * Unregisters a global shortcut of `accelerator` and * is equivalent to electron.globalShortcut.unregister */ export const unregisterShortcut = (accelerator: Electron.Accelerator) => { - globalShortcut.unregister(accelerator); -}; \ No newline at end of file + globalShortcut.unregister(accelerator) +} diff --git a/electron/utils/tray.ts b/electron/utils/tray.ts new file mode 100644 index 000000000..2ab3e6dcc --- /dev/null +++ b/electron/utils/tray.ts @@ -0,0 +1,24 @@ +import { join } from 'path' +import { Tray, app, Menu } from 'electron' +import { windowManager } from '../managers/window' + +export const createSystemTray = () => { + const iconPath = join(app.getAppPath(), 'icons', 'icon-tray.png') + const tray = new Tray(iconPath) + tray.setToolTip(app.getName()) + + const contextMenu = Menu.buildFromTemplate([ + { + label: 'Open Jan', + type: 'normal', + click: () => windowManager.showMainWindow(), + }, + { + label: 'Open Quick Ask', + type: 'normal', + click: () => windowManager.showQuickAskWindow(), + }, + { label: 'Quit', type: 'normal', click: () => app.quit() }, + ]) + tray.setContextMenu(contextMenu) +}