基于 Flutter 版 CF-TODO 待办 App 的 Windows 桌面端(Electron + 原生 JS/HTML/CSS)。 它作为一个轻量桌面小组件嵌入 Windows 桌面,展示月历与待办 / 备忘录,并通过 WebDAV 与 Nextcloud 与手机端双向同步数据。
手机端仓库:CF-todo-list
- 桌面嵌入:通过 Progman / WorkerW 子窗口将组件常驻桌面,不抢占焦点、不出现在任务栏切换。
- 视图与交互:月视图 / 周视图待办展示;勾选、拖动、缩放、透明度调节、右键菜单。
- 待办与备忘录:待办按分类(模块)着色;备忘录支持「标题 + 内容」两段结构。
- 双通道同步:
- WebDAV 整文件同步(
todolist_backup.json)。 - Nextcloud 同步(CalDAV 任务 VTODO + Notes 备忘录 + 分类模块)。
- WebDAV 整文件同步(
- 软删除 + 墓碑模型:与手机端对齐的删除传播语义,跨端删除互不复发。
- 自动合并:自动推送 / 拉取 / 合并(LWW by
updated_at,本端删除权威化)。 - 打赏:桌面展示打赏二维码(三排文字布局)。
- Electron 31 + 原生 JS / HTML / CSS(无前端框架)
- electron-builder(nsis 安装版 / portable 绿色版)
- 同步通道:
- WebDAV:
https.request,支持局域网自签证书的 host-bound 信任(rejectUnauthorized: false且仅匹配配置 host) - Nextcloud:CalDAV(任务)+ Notes API(备忘录与分类定义)
- WebDAV:
src/
main.js 主进程:窗口 / 桌面层级 / 同步 IPC / WebDAV 推送守卫
preload.js 上下文桥(contextBridge)
renderer/
index.html
styles/main.css
scripts/app.js 渲染层:待办/备忘录 UI、删除落库、分类
services/
sync.js 合并引擎:LWW + 墓碑 + 本端删除权威化(localTsMap)
nextcloud.js Nextcloud 通道:CalDAV / Notes / 分类模块笔记
webdav.js WebDAV 整文件通道
assets/donate-qrcode.jpg 打赏二维码
启动日历.bat Windows 启动器(自动 unset ELECTRON_RUN_AS_NODE)
双通道同步,软删除 + 墓碑语义与手机端保持一致:
- 软删除:本地删除不物理删数据,仅标记 / 移除并写墓碑(
deleted[]/tombstones)。 - 墓碑传播:Nextcloud 通道对「曾从服务器拉取过」的任务发
DELETE;分类定义经固定标题CFTODO_MODULES的 Notes 笔记双向同步(空分类、颜色亦同步)。 - 防复活:合并时本端已删除的 id 无条件挡住远端副本(v2.3.7 起
localTsMap本端删除权威化),避免跨端时钟竞争导致删除被覆盖。 - 一致性红线:禁止硬删;
DELETE失败保留墓碑重试。
npm install
npm run build # 产出 dist/(nsis 安装版 + portable 绿色版)
npm run build:portable # 仅绿色版
npm run build:installer # 仅安装版
⚠️ 构建需在unset ELECTRON_RUN_AS_NODE环境下进行(见启动日历.bat),否则 Electron 会以纯 Node 模式运行导致打包异常。 注:electron-builder 清理临时文件阶段可能被本地安全软件拦截(safe-delete),但dist/*.exe本体已生成,不影响使用。
| 版本 | 要点 |
|---|---|
| v2.3.9 | 修复 Nextcloud 模块笔记被误当备忘录回推产生重复副本(CFTODO_MODULES 守卫) |
| v2.3.8 | Nextcloud 通道分类(模块)跨端同步 |
| v2.3.7 | 待办删除拉取侧复活修复(本端删除权威化 localTsMap) |
| v2.3.6 及以前 | 待办 / 备忘录删除复活、墓碑清理、推送 404 误判等修复 |
待办删除与Nextcloud同步机制对比.md—— 手机端 vs 桌面端删除与同步机制对比手机端分类同步修改提示词.md—— 手机端分类同步改造提示词(双端互通需要)CFTODO_MODULES副本根因分析.md/Nextcloud同步异常排查结论.md—— 同步异常排查记录PRD_桌面日历小组件.md/PRD_桌面日历小组件_v1.0.md—— 产品需求文档需求_*.md—— 各版本需求确认稿
- 双端互通:手机端需按
手机端分类同步修改提示词.md改造后,分类才能与桌面端真正双向互通。 - 历史重复笔记:若 Nextcloud 上已存在历史的
[memo_xxx] CFTODO_MODULES笔记副本,需手动在 Notes 中清理(或在桌面端启用自动清理逻辑)。