Windows/Linux WebView 兼容 & 同步支持远程上传 #5

Closed
opened 2026-05-28 21:34:15 +08:00 by gongyun · 1 comment
Owner

fixed: 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类型
fixed: 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类型
gongyun added this to the v1.3.x 上游PR合并 milestone 2026-05-28 21:34:15 +08:00
gongyun added reference dev 2026-05-28 21:34:42 +08:00
gongyun self-assigned this 2026-05-28 21:42:37 +08:00
gongyun added a new dependency 2026-05-28 23:03:20 +08:00
Gitea-AI was assigned by gongyun 2026-05-28 23:05:38 +08:00
Author
Owner

#6 Already merged

#6 Already merged
Sign in to join this conversation.