1.7 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| webdav-group-membership-sync-4942 | File-sync mergeBookMetadata dropped groupId/groupName so group changes on already-synced books never propagated |
|
MERGED as PR #4946 into origin/main (issue #4942, from discussion #4922). WebDAV/file sync only propagated group membership for NEWLY imported books, not for books already present on both devices.
Root cause: src/services/sync/file/merge.ts mergeBookMetadata overlaid a fixed field subset (title/author/metadata/primaryLanguage/updatedAt) and DROPPED groupId/groupName. Adding a book to a group bumps book.updatedAt (GroupingModal.tsx handleConfirmGrouping) and pushes the full book (with group fields) into library.json. On a peer, an already-present book is reconciled via mergeBookMetadata (the isRemoteBookMetadataNewer LWW pass in engine.ts ~line 445), which won the updatedAt race but discarded the group change. New books instead arrive via addBookToLibrary with the full remote object, so their group travels on first import — that asymmetry is exactly what the reporter saw.
Fix: carry groupId/groupName in mergeBookMetadata, assigned RAW (not ?? local) so a group removal (undefined on the newer side) also propagates. Matches native cloud sync, which already maps group_id/group_name in src/utils/transform.ts. Deprecated group field intentionally left out (native sync doesn't carry it either).
Tests: merge.test.ts (add + removal cases), engine-metadata-sync.test.ts (full reconcile delivers group into updateBookMetadata + re-pushed index). Extends the field subset first documented in webdav-metadata-sync-4756.