-
released this
2026-05-31 10:23:10 +08:00 | 12 commits to main since this releaseadd 网络测试功能 #3
reserved 线路自定义
optimize 版本更新与检测Downloads
-
released this
2026-05-28 23:13:18 +08:00 | 17 commits to main since this releasefixed: Windows/Linux WebView 兼容
- 使用 InAppWebView 替代 webview_flutter
- 开屏公告/文件应用/分享下载三个页面桌面端支持
fixed: 改进 sync-core 网络错误信息
- 区分连接失败/超时/解码失败等,附带 URL 和底层错误链
- 同时日志中还会包含请求的 URL 和底层错误链(source),方便定位是 DNS 解析失败、TLS 握手错误、连接被重置等具体原因
feat: 增强同步引擎网络错误诊断, 区分reqwest错误类型+附带URL和source链+修复空msg问题
服务端错误码映射+上传业务错误跳过重试 80+错误码中文映射,40006等业务错误不再盲目重试
errors.rs
- 新增 4 个 SyncError 变体:
- StoragePolicyDenied — 40006/40035/40057(存储策略不允许/不存在/已变更)
- UploadFailed — 40002/40011/40012/40013/40054(上传失败/会话过期/分片错误/同名上传中)
- FileNotFound — 40044/40077(文件/实体不存在)
- PermissionDenied — 40017/40018/40007/40008(封禁/未激活/组限制/需管理员)api_client.rs
- 新增 server_code_desc() 映射 80+ 个服务端错误码到中文
- api_code_to_error() 将错误码分类为对应的 SyncError 变体。
- parse_response 使用新映射,日志显示如 存储策略不允许: 当前存储策略不允许 而非单纯网络错误uploader.rs
- 上传重试逻辑中,业务错误(StoragePolicyDenied/UploadFailed/FileNotFound/PermissionDenied)直接失败不再重试fixed: 上传失败后清理远端碎片
- 删除远端可能残留的部分文件,delete_files遇锁自动解锁
- worker_impl.rs:上传失败(Ok(Err) 或 JoinError)后调用 cleanup_failed_upload
- cleanup_failed_upload:拼接远端 URI → 调 api.delete_files,其内部遇到 40073 锁冲突会自动解锁重试;删除失败用 debug 级别(文件可能不存在,属正常情况)
feat: 上传支持远程存储策略
- 根据storage_policy.type自动路由上传地址
fixed: 上传失败清理远端碎片时防止SSE事件误删本地文件
- suppress_paths抑制机制
fixed: 远程存储上传添加Content-Range头
- 修复OneDrive等外部存储400错误
- 循环自然继续传下一个分片。202/200/201 的区分日志,方便观察上传进度
feat: 远程存储上传完成后回调服务端
- POST /callback/{policy}/{session_id}/{secret}
fixed: 远程存储上传日志加task_id+文件名前缀
- 并发时区分不同文件,创建会话也显示policy类型
Downloads
-
released this
2026-05-28 03:25:24 +08:00 | 21 commits to main since this release桌面端webview验证码支持/分享链接/公告弹窗/剪贴板检测/分类页多选增强/分享面板
新增功能
-
分享链接页面
- 支持打开 公云存储 分享链接,展示分享者信息、文件列表/单文件卡片
- 文件夹分享支持面包屑导航、进入子目录
- 支持下载、转存到自己的网盘、浏览器打开
- 密码保护分享支持输入密码解锁
- 分享过期/私密状态展示
- 同源检测:非同源时头像显示"匿"、转存按钮置灰
-
剪贴板分享链接检测
- App 启动时检测剪贴板,识别
/s/{id}格式的分享链接 - App 从后台恢复时重新检测
- 去重:同一分享 ID 不重复弹窗
- App 启动时检测剪贴板,识别
-
公告弹窗
- 登录后自动检查站点公告,有变更时弹窗展示
- 支持指纹去重,同一公告不重复提醒
-
对话框队列服务
- 串行化弹窗展示,避免公告、分享检测等多个弹窗同时弹出
-
公云存储 文件应用页面
- 通过 WebView 打开 公云存储 Web 前端处理文件
- 自动注入 session ,免二次登录
- 文件管理器长按菜单添加"在 公云存储 中打开"
-
分类文件页多选操作
- 支持长按选择、全选、批量移动/复制/删除/重命名
- 选中工具栏含全选按钮和"更多"菜单(重命名+查看详情)
- 查看详情调用主线
FileInfoPanel(含版本历史)
-
分享面板
- 替换原简单分享对话框为完整 公云存储 分享面板
- 搜索用户/组、权限矩阵(读/创建/更新/删除)、高级选项(密码/时效/下载限制/付费下载)
listGroups404 优雅降级(Pro 专属 Toast 提示)
-
SelectionToolbar 增强
- 新增全选按钮(选中数 < 总数时显示)
- 新增"更多"按钮(单选时显示,弹出重命名+查看详情)
Co-authored-by: 上游源码
UI和界面新功能增强来自有部分合适的改动, 以及新增bug, 缺陷修复和废弃语法
Bug 修复
-
listGroups404 崩溃- 新增
silent404参数,Dio 错误拦截器对预期 404 放行 listGroups捕获 404 返回 null,UI 提示"用户组功能为 Pro 专属"
- 新增
-
分享权限底部弹窗溢出
- Column 包裹
SingleChildScrollView防止小屏溢出
- Column 包裹
-
设置页 Row 溢出
- Text 包裹
Flexible防止窄屏溢出
- Text 包裹
-
移动/复制对话框空间浪费
- 对话框宽度改为屏幕 90%,去掉默认 contentPadding
- FolderPicker 内部水平 padding 从 12-16px 缩到 4px
-
分类页
WillPopScope弃用- 替换为
PopScope
- 替换为
-
分享页头像加载失败
- 原裸
NetworkImage不带 token,改为同源用UserAvatar组件(带 token 请求+缓存)同源校验->头像组件or匿名, 匿名转存按钮置灰
- 原裸
-
剪贴板分享检测只在启动时触发
- 添加
WidgetsBindingObserver,App 恢复前台时重新检测
- 添加
-
android/app/build.gradle.kts改动(jniLibs/ndk 配置增加sync_core同步库)
feat: 桌面端webview验证码支持
1. pubspec.yaml — 新增 flutter_inappwebview: ^6.2.0-beta.3 2. captcha_challenge_page.dart — 完整重写: - Android 保持 webview_flutter(mobile.WebViewWidget),零侵入 - Windows/Linux 使用 flutter_inappwebview(InAppWebView) - 统一 JS sendBridge:自动检测 CaptchaBridge.postMessage(移动端)或 flutter_inappwebview.callHandler(桌面端),HTML 模板无需分支 - 桌面端设置标准 Chrome User-Agent,避免 CAPTCHA 服务拒绝 - 验证通过后立即调用 _destroyWebView() → controller.dispose() 释放 WebView2 进程内存,然后才 Navigator.pop(token) - _disposed 标志防止重复销毁 - 刷新时桌面端通过 UniqueKey 重建 InAppWebView 实例 3. windows/CMakeLists.txt — 添加 NuGet 搜索路径辅助,解决 MSBuild 找不到 nuget.exe 的问题 fixed: flutter_inappwebview origin和referer不生效, 黑魔法拦截 feat: Windows WebView2 代理支持 (平台ffi) - 通过环境变量 WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS 配置代理 fixed: 修复黑魔法后遗症, 验证完成后会向baseurl发起回调导致长时间卡认证完成页面 feat: Windows WebView2代理+验证码状态修复 - 环境变量代理、验证状态刷新、Turnstile进度提示`Downloads
-
-
Windows-app-v1.3.2
StableAndroid APK Release / Build Android APK (push) Successful in 55m29sreleased this
2026-05-26 17:00:01 +08:00 | 28 commits to main since this release实现同步功能
平台 镜像同步 全量同步 仅上传 仅下载 相册同步 Android x x x x √ Windows √(WcfApi) √ √ √ x Linux x(fuse) √ √ √ x
日志:
- UI 日志级别选择器,立即生效无需重启
重置同步
- 停止任务 → 清空 DB → 清空本地目录 → 回到初始状态
Bug 修复
- SSE 事件流 6 个 bug(跨 chunk 行缓冲/token 刷新/URI 硬编码/多行 data/move 事件/零日志)
- SSE 事件回环(Rust API 请求附加 X-Cr-Client-Client 抑制自触发)
- 远程操作自触发抑制(suppress_paths 30s 过期)
- 同步引擎死锁(OnceCell 替代 Mutex)+ 无日志(tracing 初始化)+ 无进度(后台 spawn + 状态轮询)
- CMake 自动构建 Rust 引擎修复
- API 文件列表字段名 objects→files + URI 从 path 推导
- 冲突判断逻辑(mtime 不可靠 → 有 hash 比 hash,无 hash 比 size)
- 删除文件夹时递归清理数据库映射
- stop 后 UI 自动恢复同步(stop 未设置 SyncState::Stopped)
- 并发 force_sync 导致混乱(sync_lock 互斥保护)
- force_sync 触发 WCF 重新水合(适配器只初始化一次 + stop 不再 cleanup WCF)
- MirrorWcf 下 quick_hash 导致 os error 426(CFApi 拦截文件读取超时)
- 本地扫描 38 秒优化(MirrorWcf 跳过 hash 计算,扫描 <1 秒)
- _startSync 未传递 wcfDeleteMode 导致始终使用默认值
- Linux 下无 XDG_DOWNLOAD_DIR 环境变量异常
代码重构
- sync_engine.rs (1698 行) → sync_engine/ 目录 7 个文件
- worker.rs (1668 行) → worker/ 目录 3 个文件
- event_handler.rs (378 行) → event_handler/ 目录 2 个文件
- platform_wcf.rs → platform/ 目录
- Worker::run 拆分为 12 个 step 方法 + 编排器
- transfer_semaphore 共享(冲突/上传/下载三步骤共用)
- 跨平台 crate 增加 #![cfg(target_os = xxx)] 编译守卫
Test plan
- 全量同步:双向文件同步,冲突按策略处理
- 仅上传/仅下载模式:事件源过滤正确
- 镜像同步(WCF):占位符创建、按需水合、脱水
- WCF 删除模式切换:local_only 不删远程,sync_remote 删远程
- 强制重新同步:不触发重新水合,持续同步正常恢复
- 停止/暂停/恢复:状态正确,UI 不自动恢复
- 重置同步:DB 清空、本地目录清空
- 相册同步(Android):DCIM/Pictures 自动备份
- 日志级别热修改
- Linux 编译通过(无 sync-windows 依赖报错)
Downloads
-
Android App APK android-app-v1.3.2
StableAndroid APK Release / Build Android APK (push) Successful in 55m29sreleased this
2026-05-26 16:32:18 +08:00 | 28 commits to main since this releaseAndroid app installation package (APK) for android-app-v1.3.2.
Downloads
-
Android App APK android-app-v1.3.1
StableAndroid APK Release / Build Android APK (push) Successful in 1h10m20sreleased this
2026-05-21 22:32:49 +08:00 | 31 commits to main since this releaseAndroid app installation package (APK) for android-app-v1.3.1.
Downloads