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
|
|
@ -1910,5 +1910,29 @@
|
|||
"settings.captionRefine.desc": "확정된 자막을 로컬 AI가 앞뒤 문맥에 맞게 띄어쓰기·문장부호·잘못 들은 단어를 고칩니다.",
|
||||
"settings.captionModel": "실시간 자막 모델",
|
||||
"settings.captionModel.same": "받아쓰기와 같게",
|
||||
"settings.captionModel.desc": "실시간 자막만 다른 모델로 인식합니다. 받아쓰기 모델과 함께 GPU 메모리에 올라갑니다."
|
||||
"settings.captionModel.desc": "실시간 자막만 다른 모델로 인식합니다. 받아쓰기 모델과 함께 GPU 메모리에 올라갑니다.",
|
||||
"history.favorite": "즐겨찾기",
|
||||
"history.unfavorite": "즐겨찾기 해제",
|
||||
"cloudSync.title": "클라우드 동기화",
|
||||
"cloudSync.description": "기록·사전·회의·메모 태그·명령·템플릿을 모바일과 웹에 자동으로 맞춥니다. 어느 기기에서 지워도 다른 기기에서 함께 지워집니다.",
|
||||
"cloudSync.signIn": "로그인",
|
||||
"cloudSync.signedInAs": "{{email}} 계정으로 로그인됨",
|
||||
"cloudSync.noEmail": "이메일 없음",
|
||||
"cloudSync.lastSync": "마지막 동기화: {{time}}",
|
||||
"cloudSync.never": "아직 없음",
|
||||
"cloudSync.upToDate": "모든 변경이 올라갔습니다",
|
||||
"cloudSync.pending": "올릴 변경 {{count}}건 대기 중",
|
||||
"cloudSync.failed": "서버가 거부한 변경 {{count}}건 — \"지금 동기화\"로 다시 시도합니다",
|
||||
"cloudSync.syncNow": "지금 동기화",
|
||||
"cloudSync.syncing": "동기화 중…",
|
||||
"cloudSync.signOut": "로그아웃",
|
||||
"cloudSync.browserPending": "브라우저에서 로그인을 마쳐 주세요.",
|
||||
"cloudSync.signedOut": "로그아웃했습니다. 이 컴퓨터의 기록은 그대로 남아 있습니다.",
|
||||
"cloudSync.done": "동기화 완료 ({{count}}건 반영)",
|
||||
"cloudSync.doneWithErrors": "동기화 완료 ({{count}}건 반영, {{errors}}건 실패 — 다음 동기화 때 다시 시도)",
|
||||
"mobile.devices.platform.android": "Android",
|
||||
"mobile.devices.platform.ios": "iPhone·iPad",
|
||||
"mobile.devices.platform.web": "웹 브라우저",
|
||||
"mobile.devices.platform.windows": "Windows 데스크톱 앱",
|
||||
"mobile.devices.platform.macos": "macOS 데스크톱 앱"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue