3.9 KiB
第三方组件与许可证窗口
本文记录 2026-10-26 设计讨论中已确认的产品要求。用户随后授权按本设计实现;当前行为以代码为准。
已确认的界面设计
关于对话框的入口与新窗口统一命名为“第三方组件与许可证”。
窗口采用双栏布局:左侧组件列表显示名称和版本;右侧展示元数据、可点击的来源链接,以及可选择、复制的完整 License 和附加声明。同一组件关联多份文本时分别展示,保留原文。
使用应用自定义的简洁关于对话框替换系统默认关于面板,保留应用图标、名称、版本和版权信息,并加入“第三方组件与许可证…”按钮。点击后打开独立窗口。
状态栏菜单也提供“关于 ShadowsocksX-NG2”入口,与应用菜单打开同一个关于窗口。
关于对话框和组件窗口各保留一个实例,重复打开时置前。打开组件窗口后保留关于对话框,两者独立关闭;均不随启动自动打开。任一窗口仍开启时保留 Dock 图标,最后一个应用窗口关闭后回到菜单栏形态。
组件按名称排序,默认选中第一项,支持键盘选择。第一版只提供浏览和文本选择复制,不增加列表搜索、正文搜索、筛选和导出。
右侧使用单个连续滚动区域,依次展示元数据、License 和附加声明。每份文本保留标题或文件名及完整原文;长版本号和 URL 允许换行。聚合声明内的文件路径按原文展示,不解析成跳转链接。
聚合声明引用的公共 License 全文在所属组件详情中单列“引用的公共许可证”小节,以文件名作为每份文本的标题,保留原文并支持选择复制。同一公共文件在当前组件详情中只展示一次;切换组件后,仍可在该组件详情中阅读其引用的公共文本。公共许可证不单独加入左侧组件列表,随包文件继续共享一份。额外的 NOTICE、版权或例外条款也完整展示。
清单或关联文本读取失败时,整个窗口显示“第三方组件信息不可用”,沿用现有读取器的整体校验行为,不展示不完整清单或猜测资料;错误不影响代理运行,关于对话框仍正常使用。
已核对的数据基础
现有 BundledDependencyCatalog 提供统一随包清单与 UTF-8 文本读取能力,组件条目包含名称、版本、项目 URL、源码来源 URL、分发来源 URL、多份 License 和多份附加声明。版本可能是 tag 或完整 commit。
依据 ADR-0054,仅直接依赖拥有结构化条目,传递依赖通过所属组件的聚合声明查看;资料离线读取,用户主动点击链接时才打开浏览器。窗口与插件设置复用该数据来源。
当前读取器在加载时校验全部条目及关联文本,任意一项损坏会导致整个清单加载失败。
元信息生成器已解析聚合声明引用的 ../third-party-licenses/*.txt,将公共 License 正文及额外声明加入对应组件的 notices 引用,并去重;公共文本可直接通过现有读取入口获取。其存储在多个组件之间共享,不意味着需要在组件列表中创建独立条目。
验收范围
从关于对话框打开唯一组件窗口,重复打开置前;窗口可独立关闭,并参与现有应用形态管理。七个随包组件均离线展示元数据、完整 License、聚合声明和所引用的公共全文。检查共享文本去重、长标识换行、选择复制与数据损坏提示。界面沿用项目本地化方式,声明保留原文。
自动测试覆盖生产展示数据入口的真实随包资源读取、去重和损坏资源拒绝;窗口布局、缩放、键盘操作与选择复制另行视觉验证。实施运行格式检查、lint、hostless 测试与 Debug 构建。
关于对话框的版权信息按用户要求显示 Copyright © Qiu Yuzhou。