[v1.4] 更新 Subscribe 相关代码和追加注释#1198
Conversation
src/app/repo/subscribe.ts
Outdated
| unknown3: 3, // 3 是什么? | ||
| unknown4: 4, // 4 是什么? |
There was a problem hiding this comment.
@CodFrm
你看看要不要删掉 3 和 4
现在的代码已经没有 3 和 4
可能是你的旧代码留下来的?
| // @description 订阅xxx系列脚本 | ||
| // @version 0.1.0 | ||
| // @author You | ||
| // @connect www.baidu.com |
There was a problem hiding this comment.
UserSubscribe 里面的 @connect 好像没什么作用吧。还是说你希望这个 UserSubscribe 包含的 @connect 会让 Script脚本的 slient update 时跳过检查?也就是即使脚本本身 @connect 有变化, 只要Subscribe里有这个网域,就不视作变化而进行 slience update?
这样的话 update 时要反查 subscribe 然后做处理
这个暂时在SC未有
There was a problem hiding this comment.
是的,订阅安装的脚本使用订阅的
@connect,我记得我处理过
|
@CodFrm 我追查了一下,你升级到MV3时已经写反了 这里应该是 disable 不是 enable |
716e628 to
c271274
Compare
根据文档设计,订阅脚本应始终静默更新,不受「非重要变更静默更新脚本」 开关控制;订阅下脚本的 connect 权限完全由订阅的 connect 覆盖。 - subscribe.ts: 订阅本身更新去掉 toggle 依赖,始终静默(除非 connect 变化) - script.ts: 订阅下脚本更新始终静默,不检查 toggle 和 connect - gm_api.ts: 运行时 GM_xmlhttpRequest/GM_cookie 的 connect 权限使用订阅声明的覆盖 - utils.ts: 简化 checkSilenceUpdate,移除不再需要的 subscribeMetadata 参数
There was a problem hiding this comment.
Pull request overview
本 PR 主要针对 Subscribe(user.sub.js)安装/更新过程中,Subscribe 与脚本“首次安装来源”冲突导致的删除/关联行为不一致问题进行修正,并补充若干注释与类型调整,以让 Subscribe 仅作为“关联/同步来源”,脚本删除行为由首次安装来源决定。
Changes:
- 将 Subscribe 状态常量重构为
SubscribeStatusType(替代旧的SUBSCRIBE_STATUS_*),并同步更新引用处与测试 - 调整 Service Worker 的 Subscribe 脚本同步逻辑:新增“已存在脚本仅建立 UUID 关联”的处理,并修正 enable/disable 判断
- 补充 Subscribe 相关注释,并将若干对象字典类型改为
Record<>
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/pkg/utils/script.ts | Subscribe 解析/构建逻辑改用 SubscribeStatusType,并补充 user.sub.js 元数据示例注释 |
| src/pkg/backup/struct.ts | 备份结构里 scripts 字典类型改为 Record<string, SubscribeScript> |
| src/pages/options/routes/SubscribeList.tsx | 订阅列表 UI 逻辑改用 SubscribeStatusType 做筛选/开关状态 |
| src/pages/install/App.tsx | 安装页对 Subscribe 安装路径补充说明注释 |
| src/app/service/service_worker/subscribe.ts | Subscribe 安装/更新/同步脚本逻辑调整,处理“已存在脚本仅关联”与状态判断修正,并补充注释 |
| src/app/service/service_worker/gm_api/gm_api_subscribe.test.ts | 测试同步更新为 SubscribeStatusType |
| src/app/repo/subscribe.ts | Subscribe 仓储结构:引入 SubscribeStatusType 与 scripts 字典类型改造,移除 findByUrl |
| export const SubscribeStatusType = { | ||
| enable: 1, // 启动 checkSubscribeUpdate | ||
| disable: 2, // 停用 checkSubscribeUpdate | ||
| unknown3: 3, // 3 是什么? | ||
| unknown4: 4, // 4 是什么? | ||
| } as const; |
There was a problem hiding this comment.
SubscribeStatusType 里引入 unknown3/unknown4 且注释为“3 是什么?/4 是什么?”会把不确定的语义暴露为公共 API,后续维护/排错会非常困难。建议:如果 3/4 只是历史遗留或保留值,用更明确的命名(如 reserved3/reserved4)并说明来源/用途;如果不会出现则不要纳入类型范围,避免代码误用。
| if (script.subscribeUrl === subscribe.url) { | ||
| delete subscribe.scripts[url]; | ||
| // 删除脚本 | ||
| await this.scriptService.deleteScript(script.uuid); | ||
| removedScriptNames.push(name); | ||
| } else { | ||
| logger.warn("Subscribe Update: skip deletion", { | ||
| scriptUUID: script.uuid, | ||
| scriptUrl: url, | ||
| scriptName: name, | ||
| }); | ||
| } |
There was a problem hiding this comment.
在 upsertScript 的移除逻辑里,当脚本不是由当前 Subscribe 安装(script.subscribeUrl !== subscribe.url)时会跳过删除,但同时也没有从 subscribe.scripts 中移除该 url 关联;这会导致 subscribe.scripts 与 metadata.scripturl 长期不一致,并在后续更新中反复进入 removedScripts 分支/重复告警。建议无论是否删除脚本本体,都先删除 subscribe.scripts[url](若脚本确实由该 Subscribe 安装再额外执行 deleteScript)。另外当 scriptDAO.get(item.uuid) 返回空时也应清理该映射。
- 修复删除分支未清理 subscribe.scripts 关联导致每次更新重复触发的 bug - 删除未使用的 unknown3/unknown4 状态值 - 优化 upsertScript 中已安装脚本查找,用 Map 索引替代逐个全表扫描
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
review 了一下代码,发现几个问题,已经提交修复到分支上了(77517bb4): 1. Bug: 删除分支未清理
|
快两个月前写的,我有点忘了 |
修正1
修正了 Subscribe 订阅、Script 直接安装,以及多个 Subscribe 之间的冲突问题。
脚本的删除行为将只依首次安装方式决定。
虽然 Subscribe 会关联脚本的 UUID,但若该 Subscribe 并非首次安装来源,即使删除该 Subscribe,也不会删除脚本。
行为说明如下:
修正2
修正3
Script 的单独安装处理有可能提交另一个PR处理。
这只针对 Subscribe本身的处理