// window.ipcRenderer.on('main-process-message', (_event, ...args) => { // console.log('[Receive Main-process message]:', ...args) // }) import { currentApp, currentAppIsInstalled } from "../global/storeConfig"; import { APM_STORE_BASE_URL, APM_STORE_ARCHITECTURE } from "../global/storeConfig"; import { downloads } from "../global/downloadStatus"; import { InstallLog, DownloadItem, DownloadResult } from '../global/typedefinition'; let downloadIdCounter = 0; const fallbackIcon = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"%3E%3Crect fill="%23f0f0f0" width="100" height="100"/%3E%3Ctext x="50" y="50" text-anchor="middle" dy=".3em" fill="%23999" font-size="14"%3EAPM%3C/text%3E%3C/svg%3E'; export const handleInstall = () => { if (!currentApp.value?.Pkgname) return; downloadIdCounter += 1; // 创建下载任务 const download: DownloadItem = { id: downloadIdCounter, name: currentApp.value.Name, pkgname: currentApp.value.Pkgname, version: currentApp.value.Version, icon: `${APM_STORE_BASE_URL}/${APM_STORE_ARCHITECTURE}/${currentApp.value._category}/${currentApp.value.Pkgname}/icon.png`, status: 'queued', progress: 0, downloadedSize: 0, totalSize: 0, speed: 0, timeRemaining: 0, startTime: Date.now(), logs: [ { time: Date.now(), message: '开始下载...' } ], source: 'APM Store', retry: false }; downloads.value.push(download); // Send to main process to start download window.ipcRenderer.send('queue-install', JSON.stringify(download)); // const encodedPkg = encodeURIComponent(currentApp.value.Pkgname); // openApmStoreUrl(`apmstore://install?pkg=${encodedPkg}`, { // fallbackText: `/usr/bin/apm-installer --install ${currentApp.value.Pkgname}` // }); }; export const handleRetry = (download_: DownloadItem) => { if (!download_?.pkgname) return; download_.retry = true; // Send to main process to start download window.ipcRenderer.send('queue-install', JSON.stringify(download_)); }; export const handleUpgrade = (pkgname: string, newVersion = '') => { if (!pkgname) return; downloadIdCounter += 1; const download: DownloadItem = { id: downloadIdCounter, name: pkgname, pkgname: pkgname, version: newVersion, icon: fallbackIcon, status: 'queued', progress: 0, downloadedSize: 0, totalSize: 0, speed: 0, timeRemaining: 0, startTime: Date.now(), logs: [ { time: Date.now(), message: '开始更新...' } ], source: 'APM Update', retry: false, upgradeOnly: true }; downloads.value.push(download); window.ipcRenderer.send('queue-install', JSON.stringify(download)); }; export const handleRemove = () => { if (!currentApp.value?.Pkgname) return; window.ipcRenderer.send('remove-installed', currentApp.value.Pkgname); } window.ipcRenderer.on('remove-complete', (_event, log: DownloadResult) => { if (log.success) { currentAppIsInstalled.value = false; } else { currentAppIsInstalled.value = true; console.error('卸载失败:', log.message); } }); window.ipcRenderer.on('install-status', (_event, log: InstallLog) => { const downloadObj: any = downloads.value.find(d => d.id === log.id); downloadObj.status = log.message; }); window.ipcRenderer.on('install-log', (_event, log: InstallLog) => { const downloadObj: any = downloads.value.find(d => d.id === log.id); downloadObj.logs.push({ time: log.time, message: log.message }); }); window.ipcRenderer.on('install-complete', (_event, log: DownloadResult) => { const downloadObj: any = downloads.value.find(d => d.id === log.id); if (log.success) { downloadObj.status = 'completed'; } else { downloadObj.status = 'failed'; } });