import { createBookmarks, removeBookmarks } from "./bookmark.js"; import { saveRevision, getRevision } from "./revision.js"; const syncBookmarks = async (id, bookmark) => { console.log('Syncing bookmarks! id: ' + id + ' bookmark: ' + JSON.stringify(bookmark)); await saveRevision(); } const loadBookmarks = async () => { const data = await getRevision(); if (!data) return; const savedRev = await chrome.storage.sync.get('revId'); if (data.revId === savedRev.revId) { console.log('Same revision ID, no update required'); return; } console.log('Different revision IDs found! Old: ' + data.revId + ' New:' + savedRev.revId); removeListeners(); await chrome.storage.sync.set({ revId: data.revId }); // TODO GD: "Raw" replacement, make this more efficient to avoid flickering for (var child of data.bookmarks[0].children) { await removeBookmarks(child.id); await createBookmarks(child.children, child.id); } addListeners(); } function removeListeners() { chrome.bookmarks.onCreated.removeListener(syncBookmarks); chrome.bookmarks.onRemoved.removeListener(syncBookmarks); chrome.bookmarks.onChanged.removeListener(syncBookmarks); chrome.bookmarks.onMoved.removeListener(syncBookmarks); chrome.bookmarks.onChildrenReordered.removeLisstener(syncBookmarks); //chrome.bookmarks.onImportEnded.removeListener(syncBookmarks); } function addListeners() { chrome.bookmarks.onCreated.addListener(syncBookmarks); chrome.bookmarks.onRemoved.addListener(syncBookmarks); chrome.bookmarks.onChanged.addListener(syncBookmarks); chrome.bookmarks.onMoved.addListener(syncBookmarks); chrome.bookmarks.onChildrenReordered.addListener(syncBookmarks); //chrome.bookmarks.onImportEnded.addListener(syncBookmarks); } addListeners(); loadBookmarks(); // TODO GD: Make this websocket based setInterval(loadBookmarks, 10000);