账号同步、磁盘工具、IP 归属地数据源与纯净度、弹窗与设置调整
- 账号与同步:GitHub / Google / Apple 登录后把菜单栏项目与风格等偏好同步到 getopenstats.com,换一台 Mac 登录即恢复(AccountSync 模块、SyncController、SettingsDocument、账号设置页,openstats:// 回调) - 磁盘页成为工具页:已用 / 可清除 / 可用分段容量条、空间分析、文件系统检查、本地快照清理(辅助工具协议 v4)、其他磁盘推出 - 公网 IP:归属地数据源可选 CleanIP.io / ipapi.is / DB-IP / ipinfo.io / 本地 GeoLite2,每台 Mac 自己查、本地缓存 7 天;IPv4 / IPv6 双栈各自查询与切换;弹窗显示 ASN、运营方、原生 / 住宅等徽章与纯净度评分色带;接口区块可重置上传 / 下载统计 - 弹窗:右上角按钮改为该指标自己的图标 + 总设置;主窗口页面标题栏的开关点不动已修复;滚动条改为悬浮式,内容不再偏左;网络弹窗卡片被标题行撑宽的问题已修复 - 设置:⌘ 拖动排序说明;每个菜单栏项目单独选风格并带实时预览;网络与磁盘的进程榜单固定 5 行并平滑排序;CPU 持续高负载通知 - 设计系统:分段条、评分色带、标签徽章、胶囊切换、刷新按钮等组件与徽章配色 token - 更新日志、架构说明、README 与译文同步
This commit is contained in:
1 parent
480a7b551d
commit
c9d722f20d
58 files changed
+5223
-820
No files matched your search
@@ -138,6 +138,22 @@ final class HelperService: NSObject, NSXPCListenerDelegate, OpenStatsHelperProto
|
||||
}
|
||||
}
|
||||
|
||||
func deleteLocalSnapshots(identifiers: [String], reply: @escaping @Sendable (String?) -> Void) {
|
||||
queue.async { [self] in
|
||||
guard !identifiers.isEmpty, identifiers.count <= LocalSnapshotCommand.maxCount,
|
||||
identifiers.allSatisfy(LocalSnapshotCommand.isValidIdentifier) else { return reply("无效的快照标识") }
|
||||
for identifier in identifiers {
|
||||
let result = runTool(LocalSnapshotCommand.tool, LocalSnapshotCommand.arguments(identifier: identifier))
|
||||
guard result.status == 0 else {
|
||||
log.error("删除快照失败:\(result.output, privacy: .public)")
|
||||
return reply("tmutil 执行失败:\(result.output.trimmingCharacters(in: .whitespacesAndNewlines))")
|
||||
}
|
||||
}
|
||||
log.notice("已删除 \(identifiers.count) 个本地快照")
|
||||
reply(nil)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: 状态恢复
|
||||
|
||||
private func connectionClosed(_ id: ObjectIdentifier) {
|
||||
|
||||
Reference in new issue
Block a user