feat(desktop): two-way cloud sync with mobile and web
Rewrites the desktop mirror as services/sync/SyncEngine: a persistent outbox, per-account server-clock keyset cursors with paging, pulls that never overwrite unsent local edits, deletions both ways through sync_tombstones and per-row failure isolation. It now covers history titles and favorites, dictionary, every meeting's memos and documents, memo tags, user commands and dictation/meeting templates, and registers the desktop as a device that the phone can disconnect. Fixes shipped defects: the first pull after sign-in fetched nothing, only the first meeting's children were pushed, team meetings leaked into the personal database and lost team_id on re-push, and Realtime never connected because Electron's Node 20 has no global WebSocket (ws is now the transport). Anonymous local-mode records are imported into the first account that signs in. The settings sync section is translated and shows pending/rejected changes; synced screens reload on app:dataChanged.
This commit is contained in:
parent
b5c9ff9f31
commit
0a4f5aee64
49 changed files with 3940 additions and 1033 deletions
|
|
@ -522,5 +522,24 @@
|
|||
"settings.captionRefine.desc": "AI cục bộ sửa khoảng trắng, dấu câu và từ nghe nhầm dựa trên các dòng xung quanh.",
|
||||
"settings.captionModel": "Mô hình phụ đề trực tiếp",
|
||||
"settings.captionModel.same": "Giống đọc chính tả",
|
||||
"settings.captionModel.desc": "Phụ đề trực tiếp dùng mô hình riêng, được tải cùng mô hình đọc chính tả."
|
||||
"settings.captionModel.desc": "Phụ đề trực tiếp dùng mô hình riêng, được tải cùng mô hình đọc chính tả.",
|
||||
"history.favorite": "Yêu thích",
|
||||
"history.unfavorite": "Bỏ yêu thích",
|
||||
"cloudSync.title": "Đồng bộ đám mây",
|
||||
"cloudSync.description": "Tự động đồng bộ lịch sử, từ điển, cuộc họp, thẻ ghi chú, lệnh và mẫu với di động và web. Xóa trên một thiết bị sẽ xóa ở mọi nơi.",
|
||||
"cloudSync.signIn": "Đăng nhập",
|
||||
"cloudSync.signedInAs": "Đã đăng nhập: {{email}}",
|
||||
"cloudSync.noEmail": "không có email",
|
||||
"cloudSync.lastSync": "Đồng bộ lần cuối: {{time}}",
|
||||
"cloudSync.never": "chưa có",
|
||||
"cloudSync.upToDate": "Mọi thay đổi đã được tải lên",
|
||||
"cloudSync.pending": "{{count}} thay đổi đang chờ tải lên",
|
||||
"cloudSync.failed": "Máy chủ từ chối {{count}} thay đổi — \"Đồng bộ ngay\" sẽ thử lại",
|
||||
"cloudSync.syncNow": "Đồng bộ ngay",
|
||||
"cloudSync.syncing": "Đang đồng bộ…",
|
||||
"cloudSync.signOut": "Đăng xuất",
|
||||
"cloudSync.browserPending": "Hãy hoàn tất đăng nhập trên trình duyệt.",
|
||||
"cloudSync.signedOut": "Đã đăng xuất. Dữ liệu trên máy này vẫn được giữ nguyên.",
|
||||
"cloudSync.done": "Đồng bộ xong (áp dụng {{count}})",
|
||||
"cloudSync.doneWithErrors": "Đồng bộ xong ({{count}} áp dụng, {{errors}} lỗi — sẽ thử lại lần sau)"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue