资讯详情

Pure Live WebDAV 选择性恢复:仅恢复关注列表的实现审计与源码解析

📅 2026/10/14 21:04:18 | 华诺云谱 👁 阅读
Pure Live WebDAV 选择性恢复:仅恢复关注列表的实现审计与源码解析
音视频直播移动开发【免费下载链接】pure_live纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/YY直播/Twitch直播/SOOP直播/M38自定义源应有尽有。项目地址https://gitcode.com/gh_mirrors/pur/pure_live点击查看免费下载本篇技术指南围绕 Pure Live纯粹直播Issue #865 的源码审计结论展开剖析 3.1.3 版本暴露出的“WebDAV 恢复只能全量覆盖本机设置”问题以及提交a36ee8fa如何引入“恢复全部设置”与“仅恢复关注列表”两个明确动作并沿导入合同、界面合同、回归验证三层逐一拆解实现细节。读者读完后可以完整掌握 Pure Live 备份导入层的 section 隔离机制、关注列表规范化合同、恢复事务与并发门禁的源码级原理以及后续backupScope: favorites专用格式的演进路径。问题背景3.1.3 的恢复路径只有全量关联审计文档 记录的 Issue #865 指出Pure Live3.1.3的 WebDAV 恢复只能覆盖全部配置用户希望增加“只恢复关注列表、同时保留其余本机设置”的选择。审计结论确认修复前的源码同样只有“同步到本地”这一条全量恢复路径——文件下载后直接导入整份备份主题、播放器、弹幕屏蔽词、Cookie、WebDAV 凭据等全部本机状态都会被备份内容整体替换。这一诉求的典型场景是跨设备同步用户在 Android 手机上维护了关注的主播与分区希望把这份关注列表迁移到 Windows 桌面端却不希望桌面端本地已经调好的主题、画质、代理、IPTV 源等配置被手机备份覆盖。全量恢复语义无法满足这种“只换关注、其余不动”的需求。修复提交从模糊的“同步到本地”到两个明确动作提交a36ee8faae03ee07aa605d9b6c4e998d23faec28已核对为origin/master当前指针在备份导入层引入了两个语义明确的动作恢复全部设置等价于原有全量路径导入备份中所有 section仅恢复关注列表只读取备份中的favoriteRooms与favoriteAreas弹幕屏蔽词、屏蔽用户、首页平台可见范围、首选平台、主题、播放器、历史记录、账号 Cookie、WebDAV 凭据及其他设置均保持当前本机值。该请求在审计账本中被归类为implemented-in-current-source / native-recheck-pending——即源码层面已实现但尚未把源码回归结果外推为已安装候选上的原生真机 GUI验收结果相关状态可见 Issue 分诊账本 中 #865 的记录标记为already-fixedv3.2.0。从当前源码看这一“范围选择”能力在BackupController备份控制器中体现为两层机制_metaKeys集合backup_controller.dart包含backupVersion、backupScope、sensitiveDataIncluded三个元字段backupScope用于标记专用关注文件的恢复范围filterBackupSectionsbackup_controller.dart按调用方传入的 section 白名单过滤导出/导入数据restoreAllSettings与importAllSettings都接受sections参数并透传到过滤层。导入合同逐条拆解1. 关注数据的来源格式section 化与旧版平铺兼容当前版本backupVersion3的备份从favoritesection 精确提取房间与分区关注列表旧版平铺备份无backupVersion或 v1/v2 的扁平结构继续读取根级favoriteRooms/favoriteAreas。两种格式均支持对象与既有 JSON 字符串记录。这一点在FavoriteRoomController关注房间控制器中得到印证toJson()favorite_room_controller.dart输出favoriteRooms与favoriteAreas两个列表字段parseFavoriteListsfavorite_room_controller.dart是关注恢复专用的解析入口若数据中既无favoriteRooms也无favoriteAreas直接抛出FormatException(No favorite lists in backup)解析统一走BackupMigrationUtil.parseObjectList(json[favoriteRooms], LiveRoom.fromJson, strict: true)即同时兼容对象数组与既有 JSON 字符串形式的记录。2. 校验先于变更任一列表损坏都不产生部分覆盖目标 section 类型、至少一个关注键及目标列表结构会在任何关注列表变更之前完成校验当一个目标列表损坏时另一个列表也不会被部分覆盖。这保证了恢复的原子可见性——要么两份列表都按新值生效要么本机维持原值。实现上parseFavoriteLists先行完成严格解析与类型校验只有全部通过后restoreFavoriteListsfavorite_room_controller.dart才分别写回favoriteRooms.v与favoriteAreas.v并在写回房间列表后执行_normalizeFavoriteRoomIdentities()规范化。3. 选择性恢复的隔离性不解析目标之外的 section选择性恢复只解析目标 section因此其他 section 即使来自未来版本或结构损坏也不会阻断有效关注数据的导入。这一设计显著提升了恢复的健壮性备份文件可能由更新版本生成、包含未知字段但只要favoriteRooms/favoriteAreas本身合法关注恢复即可成功无需理解文件中的其余内容。4. 身份规范化合同空白清理与按规范身份去重恢复后的房间身份沿用现有规范化合同清理平台与房间号空白并按规范身份去重。FavoriteRoomController中的实现证据包括_normalizeFavoriteRoomIdentities()favorite_room_controller.dart对每个房间调用normalizedIdentityCopy()剔除平台/房间号为空的非法记录并以identityKey去重_isValidFavoriteRoomfavorite_room_controller.dart额外拒绝0、null、undefined、nan、none等占位房间号分区数据沿用现有LiveArea反序列化合同LiveArea.fromJsonidentityKey判重。5. 并发与持久化单门禁 批量提交全量恢复与仅关注恢复共用同一个_restoreInProgress标志和HivePrefUtil.persistBatch不会交错写入Future 只在目标列表写入持久层完成后结束。对应实现BackupController._restoreInProgressbackup_controller.dart作为进程内互斥门禁_persistRestorebackup_controller.dart在进入时检查StateError(A settings restore is already running)退出时在finally中复位HivePrefUtil.persistBatchhive_pref_util.dart在同步导入期间收集所有 Rx 通知对应的键值写入等异步流排空后统一putAll并flush()避免读者观察到多键状态转换的中间态恢复失败时_persistRestore会用恢复前的完整快照exportAllSettings(includeSensitiveData: true)再走一次persistBatch回滚内存控制器图与存储。WebDAV 界面合同按审计文档的界面合同修复后的备份文件菜单不再用含义模糊的“本地同步”动作代表恢复范围而是明确显示三项恢复全部设置、仅恢复关注列表和删除。当前源码中的菜单项由 web_dav_page.dart 的PopupMenuButton提供界面文案可在 中文本地化文件 中核对webdav_restore_all_settings为“恢复全部设置”webdav_confirm_restore_item明确提示“下一步可以勾选要恢复的内容”webdav_restoring为“正在下载并恢复配置”。界面合同的其余要点仅关注确认弹窗显示完整文件名并明确说明其他本机设置保持不变取消和系统返回都发生在远端下载及本机变更之前两种恢复拥有各自的进行中标签与成功反馈等待期间继续复用现有文件操作门禁阻止重复恢复、上传或删除交错320×480、3.0 倍文字夹具确认两个恢复入口、长文件名、范围说明、取消及确认动作均可达成功夹具进一步证明下载内容只进入选择性导入器。下载恢复的调用链在 web_dav_controller.dart 中完整可见downloadFile先经confirmRestore确认再service.readFile下载远端字节随后在本地变更前的“围栏”检查服务所有权 epoch 与目录路径一致性通过后jsonDecode得到备份 Map经BackupController.presentSections枚举可用 section再由selectSections即 backup_section_picker.dart 的pickBackupSections让用户勾选导入范围最后调用restoreAllSettings(backup, sections: sections)落库。回归验证与质量记录审计文档给出的验证数据如下层级结果初始合同红灯restoreFavoriteSettings、BackupRestoreScope与scope参数不存在首轮记录同时发现并修正测试夹具缺少 Rx 扩展的问题因此不把该轮汇总数字作为产品基线首轮质量记录local-artifacts/build-records/20260915T104224269Z-quality-focused.json直接四文件回归83/83 PASS最终六文件回归104/104 PASS当前静态分析No issues found38.1 秒本批一次 analyze最终质量记录local-artifacts/build-records/20260915T104729052Z-quality-focused.json仓库审计local-artifacts/repository-audits/20260915T104606395Z-focused.json0 error / 2 warningGitHub 同步origin/master已精确核对为a36ee8faae03ee07aa605d9b6c4e998d23faec28该批工作没有构建候选、启动 Windows GUI、连接 ADB、操作设备或发布Astra Light 使用 0 次——即验证严格停留在源码与单元/组件回归层面。后续原生边界审计文档明确列出仍未闭环的原生验收项等待在含a36ee8fa的 Android/Windows 累计候选上执行用同时含关注直播间、关注分区及其他设置的真实 WebDAV 备份分别执行取消、仅恢复关注、全量恢复、损坏目标与重复触发五类操作对仅恢复前后的 Hive/界面状态留证确认关注房间与分区更新而屏蔽项、平台选择、主题、播放器、历史记录及敏感配置保持原值该源码增量不改变宏观验收账本20 PASS / 42 RUN / 0 NR共 42 组未闭环A1-05、A2-01 与 W1-01 保持RUN。后续演进#874 补齐发送端与本地文件通道值得说明的是#865 只覆盖了 WebDAV 的接收端选择性恢复而 Issue #874 关注列表单独同步审计2026-09-23在此基础上补齐了成对的发送端与本地文件入口形成完整的闭环WebDAV 页“更多操作 → 仅上传关注列表”输出purelive_favorites_时间_UUID.txt普通悬浮按钮继续输出完整配置接收端沿用“仅恢复关注列表”本地备份页增加“仅导出关注列表 / 仅导入关注列表”专用格式保留 v3backupVersion增加backupScope: favoritesfavoritesection 精确包含favoriteRooms与favoriteAreas不包含 Cookie、WebDAV 凭据、历史、IPTV 源或其他设备设置完整恢复入口检查范围标记若误选专用文件则在任何配置写入前报格式错误——这正是 backup_controller.dart 与 backup_controller.dart 中data[backupScope] favorites抛FormatException(Favorites-only backup requires favorites restore)的保护逻辑新增 backup_roundtrip_test.dart 的跨层测试让生产关注列表导出经真实WebDAVService的 OPTIONS/PUT/PROPFIND/GET 在本机回环 WebDAV 服务器往返再由生产关注恢复事务导入断言远端文件仅含 v3backupVersion、backupScope: favorites与两组关注数据不含发送端 Cookie。综合操作指引可参见 WebDAV 配置与排查跨 Windows、Android、iOS 设备只交换关注时在 WebDAV 页右上角“更多操作”选择“仅上传关注列表”到另一台设备的文件菜单选择“仅恢复关注列表”本地离线交换则使用“设置 → 备份与还原 → 仅导出关注列表 / 仅导入关注列表”。需要提醒的是即使专用关注文件不包含 Cookie 与 WebDAV 凭据它仍可能包含个人关注信息应按敏感文件保管。赞分享音视频直播移动开发【免费下载链接】pure_live纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/YY直播/Twitch直播/SOOP直播/M38自定义源应有尽有。项目地址https://gitcode.com/gh_mirrors/pur/pure_live点击查看免费下载相关推荐Pure Live Android 小窗弹幕设置无障碍语义修复与恢复默认行为审计Pure Live Android 小窗弹幕设置无障碍语义修复与恢复默认行为审计 本篇技术指南基于 Pure Live 仓库的 Android 小窗弹幕无障碍与音视频直播移动开发vim-airline会话恢复选项选择性恢复文件vim airline会话恢复选项选择性恢复文件 在日常使用Vim编辑器时我们经常会遇到需要保存当前工作状态并在后续恢复的情况。无论是临时中断工作还是需要在开发工具UI组件Nuclide会话恢复高级选项选择性文件恢复Nuclide会话恢复高级选项选择性文件恢复 你是否遇到过这样的情况意外关闭Nuclide后重新打开时所有文件都被恢复导致界面混乱或者重要的工作文件没开发工具上一篇RIOT 中 LIS3DH 加速度计驱动的手动测试应用参数初始化、FIFO 读取与中断回调全解析下一篇Hister Extractors 完全指南从原始 HTML 到可搜索内容的领域专属解析体系创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑