diff --git a/src/app/service/service_worker/script.ts b/src/app/service/service_worker/script.ts index 59873e093..29cb85aa5 100644 --- a/src/app/service/service_worker/script.ts +++ b/src/app/service/service_worker/script.ts @@ -48,6 +48,7 @@ import { getSimilarityScore, ScriptUpdateCheck } from "./script_update_check"; import { LocalStorageDAO } from "@App/app/repo/localStorage"; import { CompiledResourceDAO } from "@App/app/repo/resource"; import { initRegularUpdateCheck } from "./regular_updatecheck"; +import { SubscribeDAO } from "@App/app/repo/subscribe"; export type TCheckScriptUpdateOption = Partial< { checkType: "user"; noUpdateCheck?: number } | ({ checkType: "system" } & Record) @@ -58,6 +59,7 @@ export type TOpenBatchUpdatePageOption = { q: string; dontCheckNow: boolean }; export class ScriptService { logger: Logger; scriptCodeDAO: ScriptCodeDAO = new ScriptCodeDAO(); + subscribeDAO: SubscribeDAO = new SubscribeDAO(); localStorageDAO: LocalStorageDAO = new LocalStorageDAO(); compiledResourceDAO: CompiledResourceDAO = new CompiledResourceDAO(); private readonly scriptUpdateCheck; @@ -841,7 +843,12 @@ export class ScriptService { if (update && (await this.systemConfig.getSilenceUpdateScript())) { try { const { oldScript, script } = await prepareScriptByCode(code, url, uuid); - if (checkSilenceUpdate(oldScript!.metadata, script.metadata)) { + let subscribeMetadata: SCMetadata | undefined; + if (oldScript?.subscribeUrl && oldScript.origin) { + const subscribe = await this.subscribeDAO.get(oldScript.subscribeUrl); + subscribeMetadata = subscribe?.metadata; + } + if (checkSilenceUpdate(oldScript!.metadata, script.metadata, subscribeMetadata)) { logger?.info("silence update script"); await this.installScript({ script, diff --git a/src/pkg/utils/utils.ts b/src/pkg/utils/utils.ts index 350913a6b..96827599a 100644 --- a/src/pkg/utils/utils.ts +++ b/src/pkg/utils/utils.ts @@ -154,12 +154,18 @@ export async function openInCurrentTab(url: string, tabId?: number) { } // 检查订阅规则是否改变,是否能够静默更新 -export function checkSilenceUpdate(oldMeta: SCMetadata, newMeta: SCMetadata): boolean { +export function checkSilenceUpdate( + oldMeta: SCMetadata, + newMeta: SCMetadata, + subscribeMetadata?: SCMetadata | undefined +): boolean { // 判断connect是否改变 const oldConnect = new Set(oldMeta.connect || []); const newConnect = new Set(newMeta.connect || []); + const subsConnect = subscribeMetadata ? new Set(subscribeMetadata?.connect || []) : null; // 老的里面没有新的就需要用户确认了 for (const key of newConnect) { + if (subsConnect?.has(key)) continue; // 如果有 Subscribe 而且它的 @connect 包含新的Script @connect, 则不用理会是否新增。 if (!oldConnect.has(key)) { return false; }