修复更新中心发送的下载项和普通下载故障覆盖的问题

This commit is contained in:
2026-04-13 13:29:58 +08:00
parent 763af5c37e
commit f044c6c3df
18 changed files with 981 additions and 39 deletions

View File

@@ -244,7 +244,7 @@ export const installPackage = async ({
filePath,
"--delete-after-install",
"--no-create-desktop-entry",
"--native"
"--native",
);
} else {
// APM

View File

@@ -27,7 +27,7 @@ export const runAria2Download = async ({
// 使用与商店安装相同的下载逻辑
const metalinkUrl = `${item.downloadUrl}.metalink`;
const result = await downloadPackage({
pkgname: item.pkgname,
metalinkUrl,

View File

@@ -14,6 +14,7 @@ import {
createUpdateCenterService,
type UpdateCenterIgnorePayload,
type UpdateCenterService,
type UpdateCenterStartTask,
} from "./service";
import type { UpdateCenterItem } from "./types";
@@ -435,8 +436,8 @@ export const registerUpdateCenterIpc = (
"update-center-unignore",
(_event, payload: UpdateCenterIgnorePayload) => service.unignore(payload),
);
ipc.handle("update-center-start", (_event, taskKeys: string[]) =>
service.start(taskKeys),
ipc.handle("update-center-start", (_event, tasks: UpdateCenterStartTask[]) =>
service.start(tasks),
);
ipc.handle("update-center-cancel", (_event, taskKey: string) =>
service.cancel(taskKey),

View File

@@ -67,7 +67,7 @@ export const installUpdateItem = async ({
// 使用与商店安装相同的安装逻辑
const origin = item.source === "apm" ? "apm" : "spark";
await installPackage({
pkgname: item.pkgname,
filePath,

View File

@@ -1,4 +1,4 @@
import { BrowserWindow, ipcMain } from "electron";
import { BrowserWindow } from "electron";
import {
LEGACY_IGNORE_CONFIG_PATH,
applyIgnoredEntries,
@@ -8,7 +8,6 @@ import {
} from "./ignore-config";
import {
createUpdateCenterQueue,
type UpdateCenterQueue,
type UpdateCenterQueueSnapshot,
} from "./queue";
import type { UpdateCenterItem, UpdateSource } from "./types";
@@ -62,12 +61,17 @@ export interface UpdateCenterIgnorePayload {
newVersion: string;
}
export interface UpdateCenterStartTask {
taskKey: string;
id: number;
}
export interface UpdateCenterService {
open: () => Promise<UpdateCenterServiceState>;
refresh: () => Promise<UpdateCenterServiceState>;
ignore: (payload: UpdateCenterIgnorePayload) => Promise<void>;
unignore: (payload: UpdateCenterIgnorePayload) => Promise<void>;
start: (taskKeys: string[]) => Promise<void>;
start: (tasks: UpdateCenterStartTask[]) => Promise<void>;
cancel: (taskKey: string) => Promise<void>;
getState: () => UpdateCenterServiceState;
subscribe: (
@@ -138,8 +142,6 @@ export const createUpdateCenterService = (
((entries: ReadonlySet<string>) =>
saveIgnoredEntries(LEGACY_IGNORE_CONFIG_PATH, entries));
let nextUpdateTaskId = 1;
const applyWarning = (message: string): void => {
queue.finishRefresh([message]);
};
@@ -188,10 +190,11 @@ export const createUpdateCenterService = (
await saveIgnored(entries);
await refresh();
},
async start(taskKeys) {
async start(tasks) {
const snapshot = queue.getSnapshot();
const taskIdByKey = new Map(tasks.map((task) => [task.taskKey, task.id]));
const selectedItems = snapshot.items.filter(
(item) => taskKeys.includes(getTaskKey(item)) && !item.ignored,
(item) => taskIdByKey.has(getTaskKey(item)) && !item.ignored,
);
if (selectedItems.length === 0) {
@@ -211,7 +214,10 @@ export const createUpdateCenterService = (
let currentItems = snapshot.items;
for (const item of selectedItems) {
const updateTaskId = nextUpdateTaskId++;
const updateTaskId = taskIdByKey.get(getTaskKey(item));
if (!updateTaskId) {
continue;
}
// 构建 metalink URL
const metalinkUrl = item.downloadUrl