diff --git a/desktop/src/main.ts b/desktop/src/main.ts index e8bf1fee0..ca8819402 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -17,7 +17,6 @@ import path from "node:path"; import { addAllowOriginHeader, createWindow, - handleDockIconHideOnAutoLaunch, handleDownloads, handleExternalLinks, setupMacWindowOnDockIconClick, @@ -27,7 +26,9 @@ 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 autoLauncher from "./main/services/autoLauncher"; import { initWatcher } from "./main/services/chokidar"; +import { userPreferences } from "./main/stores/user-preferences"; import { isDev } from "./main/util"; let appIsQuitting = false; @@ -110,6 +111,15 @@ const increaseDiskCache = () => { ); }; +const hideDockIconIfNeeded = async () => { + const shouldHideDockIcon = userPreferences.get("hideDockIcon"); + const wasAutoLaunched = await autoLauncher.wasAutoLaunched(); + + if (process.platform == "darwin" && shouldHideDockIcon && wasAutoLaunched) { + app.dock.hide(); + } +}; + /** * Older versions of our app used to maintain a cache dir using the main * process. This has been deprecated in favor of using a normal web cache. @@ -159,9 +169,8 @@ const main = () => { initLogging(); setupRendererServer(); logStartupBanner(); - handleDockIconHideOnAutoLaunch(); + hideDockIconIfNeeded(); increaseDiskCache(); - enableSharedArrayBufferSupport(); app.on("second-instance", () => { // Someone tried to run a second instance, we should focus our window. diff --git a/desktop/src/main/init.ts b/desktop/src/main/init.ts index 2bea075a3..0b73f35f9 100644 --- a/desktop/src/main/init.ts +++ b/desktop/src/main/init.ts @@ -4,11 +4,12 @@ import path from "node:path"; import { isAppQuitting, rendererURL } from "../main"; 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"; + + /** * Create an return the {@link BrowserWindow} that will form our app's UI. * @@ -145,15 +146,6 @@ export function setupMacWindowOnDockIconClick() { }); } -export async function handleDockIconHideOnAutoLaunch() { - const shouldHideDockIcon = getHideDockIconPreference(); - const wasAutoLaunched = await autoLauncher.wasAutoLaunched(); - - if (isPlatform("mac") && shouldHideDockIcon && wasAutoLaunched) { - app.dock.hide(); - } -} - function lowerCaseHeaders(responseHeaders: Record) { const headers: Record = {}; for (const key of Object.keys(responseHeaders)) { diff --git a/desktop/src/main/menu.ts b/desktop/src/main/menu.ts index 7801e77ae..bc51f6c34 100644 --- a/desktop/src/main/menu.ts +++ b/desktop/src/main/menu.ts @@ -8,10 +8,7 @@ import { import { setIsAppQuitting } from "../main"; import { forceCheckForAppUpdates } from "./services/app-update"; import autoLauncher from "./services/autoLauncher"; -import { - getHideDockIconPreference, - setHideDockIconPreference, -} from "./services/userPreference"; +import { userPreferences } from "./stores/user-preferences"; import { openLogDirectory } from "./util"; /** Create and return the entries in the app's main menu bar */ @@ -21,7 +18,7 @@ export const createApplicationMenu = async (mainWindow: BrowserWindow) => { // Whenever the menu is redrawn the current value of these variables is used // to set the checked state for the various settings checkboxes. let isAutoLaunchEnabled = await autoLauncher.isEnabled(); - let shouldHideDockIcon = getHideDockIconPreference(); + let shouldHideDockIcon = userPreferences.get("hideDockIcon"); const macOSOnly = (options: MenuItemConstructorOptions[]) => process.platform == "darwin" ? options : []; @@ -39,7 +36,9 @@ export const createApplicationMenu = async (mainWindow: BrowserWindow) => { }; const toggleHideDockIcon = () => { - setHideDockIconPreference(!shouldHideDockIcon); + // Persist + userPreferences.set("hideDockIcon", !shouldHideDockIcon); + // And update the in-memory state shouldHideDockIcon = !shouldHideDockIcon; }; diff --git a/desktop/src/main/services/app-update.ts b/desktop/src/main/services/app-update.ts index 272a1ca6c..996f73633 100644 --- a/desktop/src/main/services/app-update.ts +++ b/desktop/src/main/services/app-update.ts @@ -5,7 +5,7 @@ import { autoUpdater } from "electron-updater"; import { setIsAppQuitting, setIsUpdateAvailable } from "../../main"; import { AppUpdateInfo } from "../../types/ipc"; import log from "../log"; -import { userPreferencesStore } from "../stores/user-preferences"; +import { userPreferences } from "../stores/user-preferences"; export const setupAutoUpdater = (mainWindow: BrowserWindow) => { autoUpdater.logger = electronLog; @@ -20,8 +20,8 @@ export const setupAutoUpdater = (mainWindow: BrowserWindow) => { * Check for app update check ignoring any previously saved skips / mutes. */ export const forceCheckForAppUpdates = (mainWindow: BrowserWindow) => { - userPreferencesStore.delete("skipAppVersion"); - userPreferencesStore.delete("muteUpdateNotificationVersion"); + userPreferences.delete("skipAppVersion"); + userPreferences.delete("muteUpdateNotificationVersion"); checkForUpdatesAndNotify(mainWindow); }; @@ -41,14 +41,12 @@ const checkForUpdatesAndNotify = async (mainWindow: BrowserWindow) => { return; } - if (version === userPreferencesStore.get("skipAppVersion")) { + if (version === userPreferences.get("skipAppVersion")) { log.info(`User chose to skip version ${version}`); return; } - const mutedVersion = userPreferencesStore.get( - "muteUpdateNotificationVersion", - ); + const mutedVersion = userPreferences.get("muteUpdateNotificationVersion"); if (version === mutedVersion) { log.info(`User has muted update notifications for version ${version}`); return; @@ -92,7 +90,7 @@ export const updateAndRestart = () => { }; export const updateOnNextRestart = (version: string) => - userPreferencesStore.set("muteUpdateNotificationVersion", version); + userPreferences.set("muteUpdateNotificationVersion", version); export const skipAppUpdate = (version: string) => - userPreferencesStore.set("skipAppVersion", version); + userPreferences.set("skipAppVersion", version); diff --git a/desktop/src/main/services/userPreference.ts b/desktop/src/main/services/userPreference.ts deleted file mode 100644 index c20657aa9..000000000 --- a/desktop/src/main/services/userPreference.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { userPreferencesStore } from "../stores/user-preferences"; - -export function getHideDockIconPreference() { - return userPreferencesStore.get("hideDockIcon"); -} - -export function setHideDockIconPreference(shouldHideDockIcon: boolean) { - userPreferencesStore.set("hideDockIcon", shouldHideDockIcon); -} diff --git a/desktop/src/main/stores/user-preferences.ts b/desktop/src/main/stores/user-preferences.ts index 396e7a86c..a305f1a99 100644 --- a/desktop/src/main/stores/user-preferences.ts +++ b/desktop/src/main/stores/user-preferences.ts @@ -18,7 +18,7 @@ const userPreferencesSchema: Schema = { }, }; -export const userPreferencesStore = new Store({ +export const userPreferences = new Store({ name: "userPreferences", schema: userPreferencesSchema, });