Skip to content

feat(mobile): 支持图库自动增量备份 - #158

Merged
LC044 merged 7 commits into
masterfrom
codex/mobile-gallery-backup
Aug 31, 2026
Merged

feat(mobile): 支持图库自动增量备份#158
LC044 merged 7 commits into
masterfrom
codex/mobile-gallery-backup

Conversation

@LC044

@LC044 LC044 commented Aug 30, 2026

Copy link
Copy Markdown
Owner

描述

为 Android 原生 APP 增加系统图库自动增量备份,并优化大量照片场景下的上传体验。

  • 通过 Capacitor 原生插件分页读取 Android MediaStore,支持 Android 14 部分照片授权
  • APP 启动或回到前台时自动扫描,使用按备份来源隔离的双游标断点续传
  • 服务端通过 backup_key 幂等校验避免重试、重装或多设备导致重复入库
  • “手机备份”页面只展示任务状态、总进度、当前文件进度、上传速度和当前批次待备份列表
  • 页面和 Android 通知栏均可暂停/继续备份,通知栏同步显示进度、当前文件和速度
  • 独立“备份设置”页面支持启用/停用、Wi-Fi 限制、视频备份、服务器保存路径和本地来源相册范围
  • 目的地支持按 年/月 整理、平展所有内容、保留手机原目录结构三种模式
  • 待备份列表每批最多 40 项且不加载缩略图,手动上传队列也限制 DOM 和预览 URL 数量

当前范围为 Android;iOS 与 APP 完全退出后的系统后台调度不包含在本 PR 中。

变更类型

  • 🐛 修复错误 (Bug Fix)
  • ✨ 新功能 (New Feature)
  • 📝 文档更新 (Documentation)
  • 🎨 代码风格调整 (Style)
  • ♻️ 代码重构 (Refactor)
  • ⚡️ 性能优化 (Performance)
  • ✅ 测试增加/修改 (Tests)
  • 🔧 构建/工具链修改 (Build/Chore)

相关 Issue

暂无。

如何测试

按用户要求,本轮页面拆分与设置增强未额外运行本地测试,等待 PR CI 验证。此前基础实现阶段已完成:

  • pnpm build:通过
  • SQLite 迁移与 media API 定向测试:17 项通过
  • Android 原生插件使用 Capacitor 8 / Android 36 类库独立 Java 编译:通过
  • 服务端完整单元测试运行至 100%,无断言失败;测试进程因现有 teardown 未退出而手动结束
  • 完整 Gradle 构建受本机 JDK loopback/daemon 环境异常阻断,未进入项目编译阶段

检查清单

  • 我已阅读并遵循项目的贡献指南
  • 我的代码遵循项目的代码风格
  • 我已添加/更新了必要的测试
  • 所有测试均已通过
  • 我已更新了相关文档

I have read and agree to the CLA

@LC044

LC044 commented Aug 30, 2026

Copy link
Copy Markdown
Owner Author

已补充备份任务进度与控制能力(commit 3ac1b4a):

  • 备份页显示总进度、当前文件进度、处理数量、累计上传流量和最近 5 秒平滑上传速度
  • Android 通知栏同步显示进度、当前文件与速度
  • 页面和通知栏均可暂停/继续;大文件在当前 2MB 分片完成后暂停
  • Android 13+ 增加通知权限请求,拒绝通知权限不影响备份本身
  • 通知操作支持冷启动恢复,继续沿用已持久化图库游标

按要求未额外运行本地测试,等待本次 CI 验证。

@LC044

LC044 commented Aug 30, 2026

Copy link
Copy Markdown
Owner Author

已完成备份页面与设置页面拆分(commit 14dfe7f):备份页仅保留任务进度、速度、暂停/继续和最多 40 项的当前批次列表;设置页新增功能开关、服务器路径、来源相册范围,以及按年月、平展、保留原目录三种整理方式。来源范围会使用独立增量游标,本轮任务会锁定启动时配置,避免运行中修改设置造成游标串用。按要求未运行本地测试,等待 PR CI。

I have read and agree to the CLA

@LC044

LC044 commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

已修复双文件实况照片备份(commit aa28bf9):

  • Android MediaStore 扫描会按现有解析规则配对同目录同名的 Apple HEIC/HEIF + MOV 与 vivo JPG/JPEG + MP4/MOV
  • 静态图和伴随视频作为一个实况照片上传,队列中也按一个“实况照片”任务显示
  • 大尺寸静态图继续走分片上传,伴随视频在完成阶段关联
  • 服务端将主记录标记为 live_photo,并复用或合并此前误备份成独立视频的伴随文件
  • 增量游标升级为 v2,首次运行会执行一次对账扫描,以修复旧备份中的“照片 + 视频”双条目
  • 删除实况照片时兼容 Apple .MOV/.mov 与 vivo .mp4/.mov 伴随文件

按要求未运行本地测试;已补充伴随文件路径单元测试,等待 PR CI 验证。

@LC044

LC044 commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

已修复原图备份与 GPS 元数据丢失(commit c55ada8):

  • AndroidManifest 新增 ACCESS_MEDIA_LOCATION,并在 Android 10+ 运行时与图库权限一起申请
  • 导出媒体时使用 MediaStore.setRequireOriginal() + 原始文件描述符复制,客户端不压缩、不缩放、不转码、不重写 EXIF
  • 无法取得原始媒体或用户拒绝媒体位置权限时明确停止备份,不再静默上传 GPS 被裁剪的副本
  • 增量游标升级为 v3,首次运行会重新对账已备份资产
  • 服务端按 backup_key 原地原子替换旧文件,保留照片 ID、相册、标签等关系,并重新触发元数据提取以恢复 GPS
  • 普通文件、分片大文件及双文件实况照片都支持原图替换
  • 补充服务端原文件替换测试

按要求未运行本地测试,等待 PR CI 验证。

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 31, 2026

Copy link
Copy Markdown

Deploying trailsnap with  Cloudflare Pages  Cloudflare Pages

Latest commit: 26da931
Status: ✅  Deploy successful!
Preview URL: https://1818c251.trailsnap-bfa.pages.dev
Branch Preview URL: https://codex-mobile-gallery-backup.trailsnap-bfa.pages.dev

View logs

@LC044
LC044 merged commit 7c5ab23 into master Aug 31, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant