Skip to content

v2.4.4 — 扫码凭据不再输给旧快照、渠道包按身份去重、侧栏入口

Choose a tag to compare

@XDTrees XDTrees released this 23 Oct 10:15
· 12 commits to main since this release

扫了码,账号池还是说「登录已被拒绝」

你看到的:某两个账号卡片一直显示「登录已被拒绝 / 上游已不再接受这个登录状态」,提示你去 WorkBuddy 桌面端重新登录。可你的登录途径是这个插件的扫码登录,而且刚刚扫过——扫完还是那句。

真实原因(两处,都在本插件自己的代码里,不在上游):

① 新鲜度排序把扫码凭据排在最后。 同一个账号可能同时存在两份凭据:桌面 App 留在 auth 目录里的快照文件,和你扫码后由本插件铸造的凭据。compareFreshness 原先只认三档——桌面 live 文件、lastRefreshAtMs、expiresAtMs。扫码凭据的 sourcePath 是 channel-pack:<provider>:<ref>,既不是 live 文件名、也永远没有 lastRefreshAtMs,于是无条件输给任何残留的旧快照。它输一次,凭据就不被替换;不替换,就走不到「清除死亡标记」那一行——卡片上那句提示于是永远不会消失,反复扫码也没反应。

现在改为按来源分三级:桌面 live 文件 > 本插件扫码凭据 > 其它残留快照,同级才继续比签发时间和有效期。

② 渠道包的去重按昵称分组,会删掉刚扫进来的凭据。 本插件对渠道包做过本地补丁:同渠道同昵称视为重复条目,只保留一条。问题有两个——重扫时新凭据遇到未过期的旧条目会被当作重复删掉(连凭据一起删);而同一个人的两个账号如果昵称相同,也会被当成同一个人删掉一个。

现在改用凭据里的上游身份 user_id 判重,并且:认不出身份的一律保留(宁可留一条重复,也不能删掉别人的账号);登录半成品(昵称还是生成 id、没有有效期)在比较中让位给已完成登录的条目;都可用时按 createdAt 留新的。

左侧栏可以直接进账号池了

账号池此前只能从「设置 → XD Pool」进。现在侧栏底部(设置按钮附近)多了一个图标,点开就是同一个账号池卡片,Esc 或点面板外关闭。

按钮与面板是两个互不相邻的宿主插槽(sidebar.footer.action 与 shell.overlay),没有共同祖先,因此开合状态放在模块级而不是组件状态里;面板直接渲染同一个 PoolCard,不复制一份界面。宿主只给侧栏注册者 { wide },没有「打开设置」的接口——这也是同类插件都用自己的浮层而不是跳转的原因。老宿主缺少 shell.overlay 时只损失这个入口,不影响设置页。

测试

账号发现新增 4 例:扫码凭据胜过旧快照、桌面 live 文件仍胜过扫码凭据、凭据被替换后死亡标记清除,以及钉住「同昵称的两个人不会被合并」。全套 79 文件 1023 用例。


完整更新说明:CHANGELOG.md