diff --git a/apps/desktop/__tests__/electron-test/utils.ts b/apps/desktop/__tests__/electron-test/utils.ts index e4d3544e0..a73c5ad4e 100644 --- a/apps/desktop/__tests__/electron-test/utils.ts +++ b/apps/desktop/__tests__/electron-test/utils.ts @@ -42,6 +42,7 @@ export interface AppContext { export interface TestOptions { version: string; + args?: string[]; config?: Record; } @@ -72,7 +73,8 @@ export async function buildAndLaunchApp( const { app } = await launchApp( executablePath, userDataDir, - options?.version + options?.version, + options?.args ); const ctx: AppContext = { app, @@ -82,7 +84,8 @@ export async function buildAndLaunchApp( const { app } = await launchApp( executablePath, userDataDir, - options?.version + options?.version, + options?.args ); ctx.app = app; ctx.userDataDir = userDataDir; @@ -94,11 +97,12 @@ export async function buildAndLaunchApp( async function launchApp( executablePath: string, userDataDir: string, - version?: string + version?: string, + args: string[] = [] ) { const app = await electron.launch({ executablePath, - args: IS_DEBUG ? [] : ["--hidden"], + args: IS_DEBUG ? [...args] : ["--hidden", ...args], baseURL: "https://app.notesnook.com", acceptDownloads: true, env: { @@ -154,6 +158,7 @@ export async function buildApp(version?: string) { stdio: IS_DEBUG ? "inherit" : "ignore", env: { ...process.env, + CSC_IDENTITY_AUTO_DISCOVERY: "false", NOTESNOOK_STAGING: "true", NN_PRODUCT_NAME: productName, NN_APP_ID: `com.notesnook.test.${productName}`, diff --git a/apps/desktop/__tests__/launch.test.ts b/apps/desktop/__tests__/launch.test.ts index 266f54fdf..f58152434 100644 --- a/apps/desktop/__tests__/launch.test.ts +++ b/apps/desktop/__tests__/launch.test.ts @@ -17,7 +17,65 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { test } from "@nn/test"; +import { test, expect } from "@nn/test"; +import type { ElectronApplication } from "@playwright/test"; + +async function getMainWindowState(app: ElectronApplication) { + return await app.evaluate((window) => { + const { BrowserWindow } = window; + const mainWindow = BrowserWindow.getAllWindows()[0]; + if (!mainWindow) throw new Error("Main window not found"); + return { + isMinimized: mainWindow.isMinimized(), + isVisible: mainWindow.isVisible() + }; + }); +} + test("make sure app loads", async ({ page }) => { await page.waitForSelector(".ProseMirror"); }); + +test("hidden launch minimizes when tray is disabled", async ({ + launchElectronApp, + options +}) => { + const app = await launchElectronApp({ + version: options.version, + args: ["--hidden"], + config: { + desktopSettings: { + minimizeToSystemTray: false, + closeToSystemTray: false + } + } + }); + + const page = await app.firstWindow(); + await page.waitForSelector(".ProseMirror"); + + const state = await getMainWindowState(app); + expect(state.isMinimized).toBe(true); +}); + +test("hidden launch does not minimize when close-to-tray is enabled", async ({ + launchElectronApp, + options +}) => { + const app = await launchElectronApp({ + version: options.version, + args: ["--hidden"], + config: { + desktopSettings: { + minimizeToSystemTray: false, + closeToSystemTray: true + } + } + }); + + const page = await app.firstWindow(); + await page.waitForSelector(".ProseMirror"); + + const state = await getMainWindowState(app); + expect(state.isMinimized).toBe(false); +}); diff --git a/apps/desktop/package-lock.json b/apps/desktop/package-lock.json index 303fc499d..adc10e37c 100644 --- a/apps/desktop/package-lock.json +++ b/apps/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "@notesnook/desktop", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@notesnook/desktop", - "version": "3.4.4", + "version": "3.4.5", "hasInstallScript": true, "license": "GPL-3.0-or-later", "dependencies": { diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 48272bbfe..feadfb6d2 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -2,7 +2,7 @@ "name": "@notesnook/desktop", "productName": "Notesnook", "description": "Your private note taking space", - "version": "3.4.4", + "version": "3.4.5", "appAppleId": "1544027013", "private": true, "main": "./dist/cjs/index.js", diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 3bf553903..c1d5307e3 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -92,6 +92,17 @@ async function createWindow() { const cliOptions = await parseArguments(process.argv); setTheme(getTheme()); + // this workaround is necessary because macos doesn't support + // the --hidden flag when launching the app on startup + if ( + process.platform === "darwin" && + app.getLoginItemSettings().wasOpenedAtLogin && + config.desktopSettings.autoStart && + config.desktopSettings.startMinimized + ) { + cliOptions.hidden = true; + } + const mainWindowState = new WindowState({}); const mainWindow = new BrowserWindow({ show: !cliOptions.hidden, @@ -141,8 +152,13 @@ async function createWindow() { mainWindow.setMenuBarVisibility(false); mainWindowState.manage(mainWindow); - if (cliOptions.hidden && !(config.desktopSettings.minimizeToSystemTray - || config.desktopSettings.closeToSystemTray)) + if ( + cliOptions.hidden && + !( + config.desktopSettings.minimizeToSystemTray || + config.desktopSettings.closeToSystemTray + ) + ) mainWindow.minimize(); await mainWindow.webContents.loadURL(`${createURL(cliOptions, "/")}`); diff --git a/apps/web/package-lock.json b/apps/web/package-lock.json index 44f0b2e64..d5a23bfc2 100644 --- a/apps/web/package-lock.json +++ b/apps/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "@notesnook/web", - "version": "3.4.4", + "version": "3.4.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@notesnook/web", - "version": "3.4.4", + "version": "3.4.5", "hasInstallScript": true, "license": "GPL-3.0-or-later", "dependencies": { @@ -513,7 +513,7 @@ }, "../desktop": { "name": "@notesnook/desktop", - "version": "3.4.4", + "version": "3.4.5", "hasInstallScript": true, "license": "GPL-3.0-or-later", "dependencies": { diff --git a/apps/web/package.json b/apps/web/package.json index c8b85308b..c86a50321 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,7 +1,7 @@ { "name": "@notesnook/web", "description": "Your private note taking space", - "version": "3.4.4", + "version": "3.4.5", "private": true, "main": "./src/app.js", "homepage": "https://notesnook.com/",