Skip to content

Commit

Permalink
fix: replace robotjs by nutjs (janhq#2295) (janhq#2302)
Browse files Browse the repository at this point in the history
* fix: replace robotjs by nutjs (janhq#2295)

* fix: do not create quick ask window on test
  • Loading branch information
louis-jan authored Mar 11, 2024
1 parent 1ce3f11 commit 1fac400
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 38 deletions.
24 changes: 3 additions & 21 deletions electron/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand All @@ -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()}`)
})
Expand Down
3 changes: 1 addition & 2 deletions electron/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
"notarize": {
"teamId": "F8AH6NHVY5"
},

"icon": "icons/icon.png"
},
"linux": {
Expand Down Expand Up @@ -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",
Expand Down
35 changes: 20 additions & 15 deletions electron/utils/selectedText.ts
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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);
};
globalShortcut.unregister(accelerator)
}
24 changes: 24 additions & 0 deletions electron/utils/tray.ts
Original file line number Diff line number Diff line change
@@ -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)
}

0 comments on commit 1fac400

Please sign in to comment.