cloud-disk-sync 0.1.0

a cloud disk sync tool
Documentation
# Cloud Disk Sync - 专业级同步能力演进需求文档

## 1. 引言 (Introduction)

### 1.1 背景
当前 `cloud_disk_sync` 已具备基础的跨云盘/本地同步能力,拥有 CLI 界面和基本的进度显示。为了达到类似 FreeFileSync 的专业级同步体验,需要从核心算法、交互体验、性能表现三个维度进行深度迭代。

### 1.2 目标
构建一个**可视化、交互式、高性能**的云存储同步工具,支持复杂的同步策略和精细的文件差异管理,最终实现“所见即所得”的同步控制。

---

## 2. 核心功能需求 (Functional Requirements)

### 2.1 高级同步策略 (Sync Strategies)
目前的同步逻辑较为单一,需扩展为以下标准模式:
*   **双向同步 (Two-Way)**: 自动检测两端变化,同步新增/修改,处理冲突(基于数据库记录上次同步状态)。
*   **镜像同步 (Mirror)**: 严格使目标端成为源端的精确副本(删除目标端多余文件)。
*   **增量备份 (Update)**: 仅将源端的新增/修改复制到目标端,不删除目标端文件。
*   **自定义规则**: 允许用户为特定文件类型或路径配置独立的操作逻辑(如:`*.bak` 仅单向上传)。

### 2.2 可视化差异对比 (Visual Diff & Comparison)
这是 FreeFileSync 的核心体验,需要在 TUI (终端 UI) 或未来的 GUI 中实现:
*   **左右分栏视图**: 左侧显示源文件,右侧显示目标文件。
*   **差异高亮**:
    *   **图标标识**: 新增 (+), 删除 (-), 更新 (->), 冲突 (!)。
    *   **颜色区分**: 绿色(安全操作), 红色(删除/警告), 蓝色(移动/重命名)。
*   **多维度对比**:
    *   **文件大小与时间**: 默认快速对比。
    *   **内容哈希 (Checksum)**: 精确对比(MD5/SHA256)。
    *   **二进制内容**: 逐字节对比(用于极其严格的场景)。

### 2.3 交互式操作 (Interactive Operations)
在执行同步前,提供“预检(Dry Run)”阶段,允许用户干预:
*   **手动覆盖动作**: 用户可以点击特定文件,改变其同步方向(如:强制从右向左覆盖)。
*   **排除/忽略**: 临时将某些文件标记为“本次不经同步”。
*   **批量操作**: 选中多个文件进行统一标记。

### 2.4 历史版本与回收站 (Versioning & Trash)
*   **版本控制**: 覆盖或删除文件时,不直接物理删除,而是移动到 `.versions/` 目录或重命名为 `file.v1.bak`*   **防误删机制**: 提供“模拟删除”功能,先移动到回收站,确认无误后再清理。

---

## 3. 非功能需求 (Non-Functional Requirements)

### 3.1 性能优化 (Performance)
*   **并行文件扫描**: 多线程递归扫描目录,提升百万级文件列表的加载速度。
*   **并发传输**: 支持同时传输多个小文件(类似浏览器的并发请求),充分利用带宽。
*   **流水线处理**: 扫描、对比、传输三个阶段解耦,实现流水线作业。

### 3.2 稳定性与容错 (Reliability)
*   **原子性保障**: 文件写入使用 `write -> flush -> rename` 模式,防止断电导致文件损坏。
*   **断点续传**: 对于大文件,支持分块传输和断点恢复(目前已有基础,需完善)。
*   **网络重试**: 智能退避算法处理网络抖动。

---

## 4. UI/UX 演进路线 (UI Evolution)

### 阶段一:增强型 CLI (Current +)
*   优化进度条(已完成)。
*   输出详细的差异报告(JSON/Table)。

### 阶段二:交互式 TUI (Terminal UI)
使用 Rust 的 `ratatui` 库构建终端图形界面:
*   **界面布局**:
    ```text
    +------------------+---+------------------+
    | Source: /local   |Op | Target: /remote  |
    +------------------+---+------------------+
    | file1.txt  10KB  | ->| (missing)        |
    | (missing)        |<- | file2.log  5KB   |
    | config.yml 2KB   | !=| config.yml 1KB   |
    +------------------+---+------------------+
    | [Sync Now] [Filter] [Settings]          |
    +------------------+---+------------------+
    ```
*   **键盘操作**: 使用方向键导航,空格键切换操作动作。

### 阶段三:桌面 GUI (Desktop GUI)
使用 `Tauri` (Web技术栈) 或 `Iced` (Rust原生) 构建跨平台客户端:
*   **拖拽支持**: 拖入文件夹建立任务。
*   **图表分析**: 可视化展示文件夹大小分布、同步速度曲线。

---

## 5. 技术架构升级方案 (Technical Architecture)

### 5.1 核心层 (Core)
*   **VFS (Virtual File System) 抽象**: 统一本地文件系统与 WebDAV/S3 等云存储的接口,支持 `metadata`, `read_chunk`, `write_chunk` 等原子操作。
*   **Diff Engine**: 实现基于 Merkle Tree 的快速差异算法。

### 5.2 状态管理 (State Management)
*   **SQLite 增强**: 记录每个文件的 `last_sync_timestamp`, `last_sync_hash`,用于实现真正的双向同步冲突检测。

### 5.3 插件化 (Plugin System)
*   支持通过 WASM 或动态库扩展新的存储后端(如 Google Drive, Dropbox)。

---

## 6. 实施计划 (Implementation Plan)

1.  **M1 - 引擎重构**: 完善 VFS 抽象,实现双向同步核心算法。
2.  **M2 - TUI 开发**: 基于 `ratatui` 实现交互式差异对比界面。
3.  **M3 - 并发优化**: 引入 `tokio` 任务池,实现多文件并发传输。
4.  **M4 - GUI 原型**: 启动 Tauri 项目,复用 Rust Core 逻辑。