Qiu Yuzhou
3b3528d232
feat(subscription): show usage and provider dates
2026-10-05 00:10:13 +08:00
Qiu Yuzhou
46185797fe
feat(ui): 边栏菜单改「导入」,添加订阅移回订阅页工具栏
...
- 边栏「添加」菜单改名「导入」,图标换 square.and.arrow.down,与
分享按钮 square.and.arrow.up 成对;菜单收敛为三项导入动作
- 「添加订阅」移回订阅分区自挂工具栏,表单由订阅页自持;窗口壳删
.addSubscription workspace sheet 与 destination 映射
- 空态文案同步:订阅页指向本页按钮,服务器页改称「导入」菜单并删
去从未存在的「创建分组」表述
2026-10-04 15:41:10 +08:00
Qiu Yuzhou
d9460c4d6d
fix(ui): 订阅 URL 预填失败经错误弹窗呈现真实原因
2026-10-04 12:37:56 +08:00
Qiu Yuzhou
bf23d03288
fix(ui): 订阅卡页脚改为现行快照表述
2026-10-04 12:37:51 +08:00
Qiu Yuzhou
56ad46bec0
refactor(ui): 分区自挂页级动作与编辑/导出流程,壳收成薄转发
2026-10-03 23:03:30 +08:00
Qiu Yuzhou
aaabb4f7ea
refactor(ui): 订阅与诊断分区自持错误弹窗,塌缩两个 destination 包装壳
...
SubscriptionsView/DiagnosticsView 改为自持 ErrorAlertPresenter 并经
presentingErrors 挂载(与 ServersView 同法),只为转发 presenter 而存在的
WorkspaceSubscriptionsView/WorkspaceDiagnosticsView 整体删除,窗口壳
destinationView 直挂分区视图;WorkspaceHomeView 因承载旧版导入主动弹窗
保留。穿透链 13 个类型减至 11 个,presenter owner 减至 3 个。
2026-10-03 13:29:15 +08:00
Qiu Yuzhou
63e33724f7
feat(ui): consolidate workspace add actions
2026-09-28 11:45:58 +08:00
Qiu Yuzhou
2400c7c81d
feat(ng2): window title follows active destination
...
- window.title tracks the destination via composition-root wiring
into WorkspaceWindowOpeningAdapter.bindTitle; drop the static
"ShadowsocksX-NG 2.0" title
- delete the 28pt shell destinationHeader; subscription and
diagnostics actions move into the unified toolbar
- settings save/reset stay with the form as a top action row in
SettingsView; form-level commit actions read wrong in a toolbar
2026-09-25 03:18:59 +08:00
Qiu Yuzhou
f556c5fdb6
feat(ng2): rework subscriptions into cards with header actions ( #56 )
...
每订阅一卡片:图标 + 名称 + 地址隐藏副题 + 状态徽标三态(已同步/刷新失败/
尚未刷新)+ 更新/重试 + 「…」菜单(编辑 URL/删除);三列元数据(固定分组/
服务器/上次成功刷新)+ 失败详情行 + 脱敏说明行;失败卡警告色描边。底部操作
栏移除,添加订阅/更新全部迁入分区头动作槽位(sheet 与错误呈现由壳持有)。
地图 #52 · 票 #56;task build + test 全绿。
2026-09-24 19:34:03 +08:00
Qiu Yuzhou
fe4c3e166e
refactor(ng2): centralize typed failure presentation
2026-09-23 10:51:26 +08:00
Qiu Yuzhou
2fe401cd50
feat(ng2): add catalog workflow module as single UI-facing seam ( #41 )
...
建立目录工作流深 module(App/CatalogWorkflow/),收窄主窗口与配置 UI 对
配置目录、凭据存储、订阅快照、Legacy 导入与运行时收敛的访问:
- UI-facing interface:非敏感树/编辑面/订阅 projection、opaque NodeID 查询、
typed command(ServerEditDraft 等)、typed error 与 structured outcome
(BatchImportOutcome 逐行点名、RemovalOutcome selection invalidation);
秘密值只在显式编辑/分享/订阅 URL 命令中出现。
- 服务器编辑:配置与凭据作为一个逻辑变更,CredentialWriteJournal 保证目录
持久化失败时旧配置与旧凭据都保持有效(story 12/13,含测试)。
- 提交与收敛分离:目录提交成功与 runtimeSync 收敛阶段是独立观察面,运行时
失败不回滚已提交目录(story 38/39,含测试)。
- 订阅:创建/刷新/换址/删除沿用原子快照、last-good 保留与凭据回滚;卡片
projection 只含 host,结构化刷新状态由呈现层本地化。
- Legacy 导入端到端编排:不驱动运行时收敛、不自动重复、显式再导入创建独立
分组;handoff 仍经组合根注入的独立边界。
- Deletion test:删除 CatalogViewModel/Types/+Subscriptions 旧 facade,全部
视图与状态菜单迁移到新 seam;选择、pane、sheet、alert 状态收归 UI 持有
(ErrorAlertPresenter)。导入失败行以行号点名,不再回显 ss:// 行内容。
测试经 module interface 观察(395 项全部通过):持久化失败凭据回滚、提交/
收敛阶段分离、收敛失败不回滚、导入不触发运行时等新增场景;既有 Domain、
协调器与运行时测试保持不变。
Out of scope(spec #41):设置编辑、ProxyRuntimeController、Legacy handoff、
新视觉设计、独立编译 target。
2026-09-22 11:39:07 +08:00
Qiu Yuzhou
ea801d5f38
feat(catalog): remove node enable state
...
Migrate legacy enabled fields to v3 without preserving their semantics.
Keep recoverable invalid imports visible and filter them during activation.
2026-09-22 08:40:13 +08:00
Qiu Yuzhou
0ecca53a20
feat(ng2): subscription fetch, snapshot semantics and UI ( #35 )
...
SIP-008 v1 + x_shadowsocksx_ng extension parsing with flat fallback;
HTTPS/Content-Type gated fetch seam; atomic snapshot commits carrying
only the local enabled overlay; URL edit keeps identity; recursive
delete clears source, fixed group, members and credentials; subscription
cards pane and menu-bar update-all wiring.
2026-09-21 06:15:52 +08:00