From 30a7100fa94d08043bccd9548c455aab29a38dd7 Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Thu, 14 May 2026 12:37:08 +0500 Subject: [PATCH] desktop: disable updates for portable desktop app --- apps/desktop/src/api/os-integration.ts | 3 ++- apps/desktop/src/utils/index.ts | 4 ++++ apps/web/src/dialogs/settings/behaviour-settings.ts | 3 ++- apps/web/src/dialogs/settings/other-settings.ts | 3 ++- apps/web/src/stores/setting-store.ts | 2 ++ 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/api/os-integration.ts b/apps/desktop/src/api/os-integration.ts index fe7960255..e3192d045 100644 --- a/apps/desktop/src/api/os-integration.ts +++ b/apps/desktop/src/api/os-integration.ts @@ -38,7 +38,7 @@ import { dirname } from "path"; import { resolvePath } from "../utils/resolve-path"; import { observable } from "@trpc/server/observable"; import { AssetManager } from "../utils/asset-manager"; -import { isFlatpak, isSnap } from "../utils"; +import { isFlatpak, isPortable, isSnap } from "../utils"; import { setupDesktopIntegration } from "../utils/desktop-integration"; import { rm } from "fs/promises"; import { disableCustomDns, enableCustomDns } from "../utils/custom-dns"; @@ -60,6 +60,7 @@ const NotificationOptions = z.object({ export const osIntegrationRouter = t.router({ isFlatpak: t.procedure.query(() => isFlatpak()), isSnap: t.procedure.query(() => isSnap()), + isPortable: t.procedure.query(() => isPortable()), zoomFactor: t.procedure.query(() => config.zoomFactor), setZoomFactor: t.procedure.input(z.number()).mutation(({ input: factor }) => { diff --git a/apps/desktop/src/utils/index.ts b/apps/desktop/src/utils/index.ts index 1bea5a1da..253e226de 100644 --- a/apps/desktop/src/utils/index.ts +++ b/apps/desktop/src/utils/index.ts @@ -33,3 +33,7 @@ export function isFlatpak() { export function isSnap() { return process.env.SNAP !== undefined; } + +export function isPortable() { + return process.env.PORTABLE_EXECUTABLE_DIR !== undefined; +} diff --git a/apps/web/src/dialogs/settings/behaviour-settings.ts b/apps/web/src/dialogs/settings/behaviour-settings.ts index 023eb3743..abc9f7fa8 100644 --- a/apps/web/src/dialogs/settings/behaviour-settings.ts +++ b/apps/web/src/dialogs/settings/behaviour-settings.ts @@ -240,7 +240,8 @@ export const BehaviourSettings: SettingsGroup[] = [ useSettingStore.subscribe((s) => s.autoUpdates, listener), isHidden: () => useSettingStore.getState().isFlatpak || - useSettingStore.getState().isSnap, + useSettingStore.getState().isSnap || + useSettingStore.getState().isPortable, components: [ { type: "toggle", diff --git a/apps/web/src/dialogs/settings/other-settings.ts b/apps/web/src/dialogs/settings/other-settings.ts index 2a221e3a9..6e2857012 100644 --- a/apps/web/src/dialogs/settings/other-settings.ts +++ b/apps/web/src/dialogs/settings/other-settings.ts @@ -82,7 +82,8 @@ export const AboutSettings: SettingsGroup[] = [ description: strings.releaseTrackDesc(), isHidden: () => useSettingStore.getState().isFlatpak || - useSettingStore.getState().isSnap, + useSettingStore.getState().isSnap || + useSettingStore.getState().isPortable, components: [ { type: "dropdown", diff --git a/apps/web/src/stores/setting-store.ts b/apps/web/src/stores/setting-store.ts index ab0c3240c..20df67b5d 100644 --- a/apps/web/src/stores/setting-store.ts +++ b/apps/web/src/stores/setting-store.ts @@ -90,6 +90,7 @@ class SettingStore extends BaseStore { autoUpdates = false; isFlatpak = false; isSnap = false; + isPortable = false; proxyRules?: string; isInboxEnabled = false; @@ -104,6 +105,7 @@ class SettingStore extends BaseStore { profile: db.settings.getProfile(), isFlatpak: await desktop?.integration.isFlatpak.query(), isSnap: await desktop?.integration.isSnap.query(), + isPortable: await desktop?.integration.isPortable.query(), desktopIntegrationSettings: await desktop?.integration.desktopIntegration.query(), privacyMode: await desktop?.integration.privacyMode.query(),