feat(quick-save): Live-Sync via chrome.storage.onChanged in app.js (boards neu laden + renderBoards)
This commit is contained in:
@@ -26,6 +26,7 @@ async function init() {
|
|||||||
startClock();
|
startClock();
|
||||||
bindGlobalEvents();
|
bindGlobalEvents();
|
||||||
bindSettingsEvents();
|
bindSettingsEvents();
|
||||||
|
bindStorageSync();
|
||||||
initSearch();
|
initSearch();
|
||||||
initPalette();
|
initPalette();
|
||||||
await migrateSticky();
|
await migrateSticky();
|
||||||
@@ -231,4 +232,24 @@ function bindGlobalEvents() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---- LIVE-SYNC (Quick-Save aus dem Background) ----
|
||||||
|
// Ein Quick-Save schreibt boards im Background. Ein offener Tab muss das sehen,
|
||||||
|
// sonst ueberschreibt er den Eintrag beim naechsten eigenen Save (QS-03).
|
||||||
|
function bindStorageSync() {
|
||||||
|
if (typeof chrome === 'undefined' || !chrome.storage || !chrome.storage.onChanged) return;
|
||||||
|
chrome.storage.onChanged.addListener((changes, area) => {
|
||||||
|
if (area !== 'local' || !changes.boards) return;
|
||||||
|
const next = changes.boards.newValue;
|
||||||
|
if (!Array.isArray(next)) return;
|
||||||
|
// Guard (W-c): nicht mitten in einer offenen Interaktion das boards-Array ersetzen und
|
||||||
|
// neu rendern. Ein offener Dialog (Delete/Edit) haelt evtl. eine board-Referenz per Closure;
|
||||||
|
// ein laufender Board-Drag (Phase 5) wuerde durch renderBoards() (replaceChildren) abgerissen.
|
||||||
|
// In dem Fall den Sync verwerfen — der naechste eigene Save/Render zieht den Stand nach.
|
||||||
|
if (document.querySelector('.dialog-overlay.active') ||
|
||||||
|
document.body.classList.contains('board-dragging')) return;
|
||||||
|
boards = next;
|
||||||
|
renderBoards();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', init);
|
document.addEventListener('DOMContentLoaded', init);
|
||||||
|
|||||||
Reference in New Issue
Block a user