diff --git a/src/App.vue b/src/App.vue index a039a719..7ff753f8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -63,7 +63,8 @@ :show="showModal" :app="currentApp" :screenshots="screenshots" - :isinstalled="currentAppIsInstalled" + :spark-installed="currentAppSparkInstalled" + :apm-installed="currentAppApmInstalled" @close="closeDetail" @install="onDetailInstall" @remove="onDetailRemove" @@ -152,7 +153,8 @@ import UninstallConfirmModal from "./components/UninstallConfirmModal.vue"; import { APM_STORE_BASE_URL, currentApp, - currentAppIsInstalled, + currentAppSparkInstalled, + currentAppApmInstalled, currentStoreMode, } from "./global/storeConfig"; import { @@ -393,7 +395,8 @@ const openDetail = (app: App | Record) => { loadScreenshots(fullApp); showModal.value = true; - currentAppIsInstalled.value = false; + currentAppSparkInstalled.value = false; + currentAppApmInstalled.value = false; checkAppInstalled(fullApp); nextTick(() => { @@ -405,11 +408,38 @@ const openDetail = (app: App | Record) => { }; const checkAppInstalled = (app: App) => { - window.ipcRenderer - .invoke("check-installed", { pkgname: app.pkgname, origin: app.origin }) - .then((isInstalled: boolean) => { - currentAppIsInstalled.value = isInstalled; - }); + if (app.isMerged) { + if (app.sparkApp) { + window.ipcRenderer + .invoke("check-installed", { + pkgname: app.sparkApp.pkgname, + origin: "spark", + }) + .then((isInstalled: boolean) => { + currentAppSparkInstalled.value = isInstalled; + }); + } + if (app.apmApp) { + window.ipcRenderer + .invoke("check-installed", { + pkgname: app.apmApp.pkgname, + origin: "apm", + }) + .then((isInstalled: boolean) => { + currentAppApmInstalled.value = isInstalled; + }); + } + } else { + window.ipcRenderer + .invoke("check-installed", { pkgname: app.pkgname, origin: app.origin }) + .then((isInstalled: boolean) => { + if (app.origin === "spark") { + currentAppSparkInstalled.value = isInstalled; + } else { + currentAppApmInstalled.value = isInstalled; + } + }); + } }; const loadScreenshots = (app: App) => { diff --git a/src/components/AppDetailModal.vue b/src/components/AppDetailModal.vue index 75d60120..cc9445a5 100644 --- a/src/components/AppDetailModal.vue +++ b/src/components/AppDetailModal.vue @@ -97,7 +97,9 @@ : 'from-brand to-brand-dark' " @click="handleInstall" - :disabled="installFeedback || isCompleted" + :disabled=" + installFeedback || isCompleted || isOtherVersionInstalled + " > (); const emit = defineEmits<{ @@ -326,15 +329,30 @@ const activeDownload = computed(() => { return downloads.value.find((d) => d.pkgname === displayApp.value?.pkgname); }); +const isinstalled = computed(() => { + return viewingOrigin.value === "spark" + ? props.sparkInstalled + : props.apmInstalled; +}); + +const isOtherVersionInstalled = computed(() => { + return viewingOrigin.value === "spark" + ? props.apmInstalled + : props.sparkInstalled; +}); + const { installFeedback } = useInstallFeedback(appPkgname); const { isCompleted } = useDownloadItemStatus(appPkgname); const installBtnText = computed(() => { - if (props.isinstalled) { + if (isinstalled.value) { return "已安装"; } if (isCompleted.value) { return "已安装"; } + if (isOtherVersionInstalled.value) { + return viewingOrigin.value === "spark" ? "已安装apm版" : "已安装spark版"; + } if (installFeedback.value) { const status = activeDownload.value?.status; if (status === "downloading") { diff --git a/src/global/storeConfig.ts b/src/global/storeConfig.ts index d7838bc8..7ea92177 100644 --- a/src/global/storeConfig.ts +++ b/src/global/storeConfig.ts @@ -9,6 +9,7 @@ export const APM_STORE_STATS_BASE_URL: string = // 下面的变量用于存储当前应用的信息,其实用在多个组件中 export const currentApp = ref(null); -export const currentAppIsInstalled = ref(false); +export const currentAppSparkInstalled = ref(false); +export const currentAppApmInstalled = ref(false); export const currentStoreMode = ref("hybrid"); diff --git a/src/modules/processInstall.ts b/src/modules/processInstall.ts index 3c0100c7..94b82a32 100644 --- a/src/modules/processInstall.ts +++ b/src/modules/processInstall.ts @@ -3,7 +3,8 @@ import pino from "pino"; import { APM_STORE_STATS_BASE_URL, currentApp, - currentAppIsInstalled, + currentAppSparkInstalled, + currentAppApmInstalled, } from "../global/storeConfig"; import { APM_STORE_BASE_URL } from "../global/storeConfig"; import { downloads } from "../global/downloadStatus"; @@ -138,9 +139,18 @@ export const handleRemove = (appObj?: App) => { window.ipcRenderer.on("remove-complete", (_event, log: DownloadResult) => { if (log.success) { - currentAppIsInstalled.value = false; + if (log.origin === "spark") { + currentAppSparkInstalled.value = false; + } else { + currentAppApmInstalled.value = false; + } } else { - currentAppIsInstalled.value = true; + // We could potentially restore the value, but if remove failed, it should still be installed. + if (log.origin === "spark") { + currentAppSparkInstalled.value = true; + } else { + currentAppApmInstalled.value = true; + } console.error("卸载失败:", log.message); } });