mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-04-26 09:20:18 +08:00
120 lines
3.7 KiB
TypeScript
120 lines
3.7 KiB
TypeScript
// 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';
|
|
}
|
|
});
|