From 578db5afa026bf221b2d54dc41252f2d5d6f5fb6 Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sun, 10 Apr 2022 09:16:21 +0300 Subject: [PATCH 1/8] fix(build): run dev for windows --- package.json | 2 +- scripts/dev-server.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2236dcb7..08be9712 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "main": "build/src/main/index.js", "scripts": { "dev": "run-p dev:watch dev:vue-devtools", - "dev:watch": "tsc-watch -p tsconfig.electron.json --onFirstSuccess 'npm run dev:server'", + "dev:watch": "tsc-watch -p tsconfig.electron.json --onFirstSuccess \"npm run dev:server\"", "dev:server": "node build/scripts/dev-server.js", "dev:vue-devtools": "vue-devtools", "build:ts": "tsc -p tsconfig.electron.json", diff --git a/scripts/dev-server.ts b/scripts/dev-server.ts index 0a7a1c22..03a08d3e 100644 --- a/scripts/dev-server.ts +++ b/scripts/dev-server.ts @@ -1,5 +1,5 @@ import { spawn } from 'child_process' -import type { ChildProcess, SpawnOptionsWithoutStdio } from 'child_process' +import type { ChildProcess } from 'child_process' import path from 'path' import chalk from 'chalk' import chokidar from 'chokidar' @@ -23,9 +23,9 @@ async function startRenderer () { function startElectron () { if (electronProcess) return - const args = ['.', rendererPort] as SpawnOptionsWithoutStdio - - electronProcess = spawn('electron', args) + electronProcess = spawn('electron', ['.', (rendererPort || 0).toString()], { + shell: true + }) electronProcess?.stdout?.on('data', data => { console.log(chalk.blueBright('[Electron] ') + chalk.white(data.toString())) @@ -34,6 +34,10 @@ function startElectron () { electronProcess?.stderr?.on('data', data => { console.log(chalk.redBright('[Electron] ') + chalk.white(data.toString())) }) + + electronProcess?.on('error', error => { + console.log(chalk.redBright('[Electron] ', error)) + }) } function restartElectron () { From 884ee8c768bee5922d8319d529582e595c5e6906 Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sun, 10 Apr 2022 09:16:30 +0300 Subject: [PATCH 2/8] chore: keep empty types folder --- src/renderer/types/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/renderer/types/.keep diff --git a/src/renderer/types/.keep b/src/renderer/types/.keep new file mode 100644 index 00000000..e69de29b From 0f42308558b4617ff6119d76b97f0dfdebcd6180 Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sun, 10 Apr 2022 09:16:51 +0300 Subject: [PATCH 3/8] fix(main): create popup menu in win --- src/main/components/menu.ts | 7 ------- src/main/services/ipc/context-menu.ts | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/components/menu.ts b/src/main/components/menu.ts index 7f04dd37..8d5a95dc 100644 --- a/src/main/components/menu.ts +++ b/src/main/components/menu.ts @@ -5,10 +5,3 @@ export const createMenu = (template: MenuItemConstructorOptions[]) => { const menu = Menu.buildFromTemplate(template) return menu } - -export const createPopupMenu = (template: MenuItemConstructorOptions[]) => { - const menu = createMenu(template) - menu.popup({ window: BrowserWindow.getFocusedWindow()! }) - - return menu -} diff --git a/src/main/services/ipc/context-menu.ts b/src/main/services/ipc/context-menu.ts index 612d8349..7089ea6e 100644 --- a/src/main/services/ipc/context-menu.ts +++ b/src/main/services/ipc/context-menu.ts @@ -1,4 +1,4 @@ -import { createPopupMenu } from '../../components/menu' +import { createMenu } from '../../components/menu' import type { MenuItemConstructorOptions } from 'electron' import { BrowserWindow, MenuItem, dialog, ipcMain } from 'electron' import type { @@ -14,7 +14,7 @@ export const subscribeToContextMenu = () => { const { name, type } = payload return new Promise(resolve => { - createPopupMenu([ + const menu = createMenu([ { label: `Rename "${name}"`, click: () => @@ -45,6 +45,8 @@ export const subscribeToContextMenu = () => { } } ]) + + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } ) @@ -55,7 +57,7 @@ export const subscribeToContextMenu = () => { const { name, type, selectedCount } = payload return new Promise(resolve => { - const menu = createPopupMenu([]) + const menu = createMenu([]) const defaultMenu: MenuItemConstructorOptions[] = [ { @@ -151,18 +153,21 @@ export const subscribeToContextMenu = () => { if (type === 'folder' || type === 'all' || type === 'inbox') { defaultMenu.forEach(i => { menu.append(new MenuItem(i)) + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } if (type === 'favorites') { favoritesMenu.forEach(i => { menu.append(new MenuItem(i)) + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } if (type === 'trash') { trashMenu.forEach(i => { menu.append(new MenuItem(i)) + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } @@ -181,7 +186,7 @@ export const subscribeToContextMenu = () => { const { name, type, data } = payload return new Promise(resolve => { - const menu = createPopupMenu([]) + const menu = createMenu([]) const createLanguageMenu = () => { return languages.map(i => { @@ -308,18 +313,21 @@ export const subscribeToContextMenu = () => { if (type === 'folder') { folderMenu.forEach(i => { menu.append(new MenuItem(i)) + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } if (type === 'tag') { tagMenu.forEach(i => { menu.append(new MenuItem(i)) + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } if (type === 'trash') { trashMenu.forEach(i => { menu.append(new MenuItem(i)) + menu.popup({ window: BrowserWindow.getFocusedWindow()! }) }) } From 990c7b3b2873dc92c2fd0b29370bf3b00a0bf8a1 Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sun, 10 Apr 2022 09:31:06 +0300 Subject: [PATCH 4/8] fix(main): show app title bar for win --- src/main/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/index.ts b/src/main/index.ts index 4ab820bc..ff77a8e4 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -11,6 +11,7 @@ import { subscribeToDialog } from './services/ipc/dialog' import { checkForUpdate } from './services/update-check' const isDev = process.env.NODE_ENV === 'development' +const isMac = process.platform === 'darwin' createDb() const apiServer = new ApiServer() @@ -24,7 +25,7 @@ function createWindow () { width: 1000, height: 600, ...bounds, - titleBarStyle: 'hidden', + titleBarStyle: isMac ? 'hidden' : 'default', webPreferences: { preload: path.resolve(__dirname, 'preload.js'), nodeIntegration: true, From 903e3c0192b63fa00e3c62953eda7a4dfcdafa39 Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sun, 10 Apr 2022 09:35:10 +0300 Subject: [PATCH 5/8] feat: expose `platform` --- src/main/preload.ts | 4 +++- src/renderer/electron.ts | 4 ++-- src/renderer/store/app.ts | 4 +++- src/shared/types/main/index.d.ts | 1 + src/shared/types/renderer/store/app.d.ts | 1 + 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/preload.ts b/src/main/preload.ts index c57cc1f1..03d2ba57 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -5,6 +5,7 @@ import type { ElectronBridge } from '@shared/types/main' import { version } from '../../package.json' import type { TrackEvents } from '@shared/types/main/analytics' import { analytics } from './services/analytics' +import { platform } from 'os' const isDev = process.env.NODE_ENV === 'development' @@ -39,5 +40,6 @@ contextBridge.exposeInMainWorld('electron', { : `${version}/${event}` analytics.pageview(path).send() - } + }, + platform: () => platform() } as ElectronBridge) diff --git a/src/renderer/electron.ts b/src/renderer/electron.ts index ba8730f7..f43ce936 100644 --- a/src/renderer/electron.ts +++ b/src/renderer/electron.ts @@ -1,3 +1,3 @@ -const { ipc, store, db, track } = window.electron +const { ipc, store, db, track, platform } = window.electron -export { ipc, store, db, track } +export { ipc, store, db, track, platform } diff --git a/src/renderer/store/app.ts b/src/renderer/store/app.ts index eaf7edbc..8e5fa1b1 100644 --- a/src/renderer/store/app.ts +++ b/src/renderer/store/app.ts @@ -1,3 +1,4 @@ +import { platform } from '@/electron' import type { State } from '@shared/types/renderer/store/app' import { defineStore } from 'pinia' import { version } from '../../../package.json' @@ -16,6 +17,7 @@ export const useAppStore = defineStore('app', { footerHeight: 30 } }, - version + version, + platform: platform() }) }) diff --git a/src/shared/types/main/index.d.ts b/src/shared/types/main/index.d.ts index e6487b1c..28301d8e 100644 --- a/src/shared/types/main/index.d.ts +++ b/src/shared/types/main/index.d.ts @@ -103,4 +103,5 @@ export interface ElectronBridge { isExist: (path: string) => boolean } track: (event: TrackEvents, payload?: string) => void + platform: () => NodeJS.Platform } diff --git a/src/shared/types/renderer/store/app.d.ts b/src/shared/types/renderer/store/app.d.ts index 01f8bf0c..7c58baae 100644 --- a/src/shared/types/renderer/store/app.d.ts +++ b/src/shared/types/renderer/store/app.d.ts @@ -9,6 +9,7 @@ export interface AppSizes { } export interface State { + platform: NodeJS.Platform theme: string sizes: AppSizes showTags: boolean From cb86de58773c78b1dd9bbdaef35b365b98e61089 Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Sun, 10 Apr 2022 09:36:14 +0300 Subject: [PATCH 6/8] polish: add border for title bar for win --- src/renderer/App.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 8949f8d5..e429a3f3 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -1,5 +1,8 @@