From f24ebbd648852a45b0ed2e56c9512f4a8c24c46b Mon Sep 17 00:00:00 2001 From: ccd0 Date: Tue, 23 Jan 2018 22:17:31 -0800 Subject: [PATCH] Revert reversion of DataBoard / forceSync changes. This reverts commit ea08bc882230289d675c58c64572d6a7bd0c4a7a. --- src/Monitoring/ThreadWatcher.coffee | 21 ++++---- src/Quotelinks/QuoteYou.coffee | 4 +- src/classes/DataBoard.coffee | 78 +++++++++++++++++++---------- 3 files changed, 64 insertions(+), 39 deletions(-) diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 144a8a34b..8264b748c 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -185,9 +185,8 @@ ThreadWatcher = interval = if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] then 5 * $.MINUTE else 2 * $.HOUR now = Date.now() unless now - interval < (db.data.lastChecked or 0) <= now - ThreadWatcher.fetchAllStatus() # calls forceSync - db.data.lastChecked = now - db.save() + ThreadWatcher.fetchAllStatus() + db.setLastChecked() ThreadWatcher.timeout = setTimeout ThreadWatcher.fetchAuto, interval buttonFetchAll: -> @@ -197,13 +196,15 @@ ThreadWatcher = ThreadWatcher.fetchAllStatus() fetchAllStatus: -> - ThreadWatcher.db.forceSync() - ThreadWatcher.unreaddb.forceSync() - QuoteYou.db?.forceSync() - return unless (threads = ThreadWatcher.getAll()).length - for thread in threads - ThreadWatcher.fetchStatus thread - return + dbs = [ThreadWatcher.db, ThreadWatcher.unreaddb, QuoteYou.db].filter((x) -> x) + n = 0 + for db in dbs + db.forceSync -> + if (++n) is dbs.length + threads = ThreadWatcher.getAll() + for thread in threads + ThreadWatcher.fetchStatus thread + return fetchStatus: (thread, force) -> {boardID, threadID, data} = thread diff --git a/src/Quotelinks/QuoteYou.coffee b/src/Quotelinks/QuoteYou.coffee index 8a380384b..09534c1b9 100644 --- a/src/Quotelinks/QuoteYou.coffee +++ b/src/Quotelinks/QuoteYou.coffee @@ -5,8 +5,8 @@ QuoteYou = @db = new DataBoard 'yourPosts' $.sync 'Remember Your Posts', (enabled) -> Conf['Remember Your Posts'] = enabled $.on d, 'QRPostSuccessful', (e) -> - $.forceSync 'Remember Your Posts' - if Conf['Remember Your Posts'] + $.get 'Remember Your Posts', Conf['Remember Your Posts'], (items) -> + return unless items['Remember Your Posts'] {boardID, threadID, postID} = e.detail (QuoteYou.db.set {boardID, threadID, postID, val: true}) diff --git a/src/classes/DataBoard.coffee b/src/classes/DataBoard.coffee index 0654933aa..84d150bfd 100644 --- a/src/classes/DataBoard.coffee +++ b/src/classes/DataBoard.coffee @@ -13,21 +13,44 @@ class DataBoard @sync = sync $.on d, '4chanXInitFinished', init - save: (cb) -> $.set @key, @data, cb + changes: [] + + save: (change, cb) -> + snapshot1 = JSON.stringify @data + change() + {changes} = @ + changes.push change + $.get @key, {boards: {}}, (items) => + @data = items[@key] + snapshot2 = JSON.stringify @data + c() for c in changes + $.set @key, @data, => + @changes = [] + @sync?() if snapshot1 isnt snapshot2 + cb?() + + forceSync: (cb) -> + snapshot1 = JSON.stringify @data + {changes} = @ + $.get @key, {boards: {}}, (items) => + @data = items[@key] + snapshot2 = JSON.stringify @data + c() for c in changes + @sync?() if snapshot1 isnt snapshot2 + cb?() delete: ({boardID, threadID, postID}) -> - $.forceSync @key - if postID - return unless @data.boards[boardID]?[threadID] - delete @data.boards[boardID][threadID][postID] - @deleteIfEmpty {boardID, threadID} - else if threadID - return unless @data.boards[boardID] - delete @data.boards[boardID][threadID] - @deleteIfEmpty {boardID} - else - delete @data.boards[boardID] - @save() + @save => + if postID + return unless @data.boards[boardID]?[threadID] + delete @data.boards[boardID][threadID][postID] + @deleteIfEmpty {boardID, threadID} + else if threadID + return unless @data.boards[boardID] + delete @data.boards[boardID][threadID] + @deleteIfEmpty {boardID} + else + delete @data.boards[boardID] deleteIfEmpty: ({boardID, threadID}) -> if threadID @@ -38,24 +61,29 @@ class DataBoard delete @data.boards[boardID] set: (data, cb) -> - $.forceSync @key - @setUnsafe data, cb + @save => + @setUnsafe data + , cb - setUnsafe: ({boardID, threadID, postID, val}, cb) -> + setUnsafe: ({boardID, threadID, postID, val}) -> if postID isnt undefined ((@data.boards[boardID] or= {})[threadID] or= {})[postID] = val else if threadID isnt undefined (@data.boards[boardID] or= {})[threadID] = val else @data.boards[boardID] = val - @save cb extend: ({boardID, threadID, postID, val, rm}, cb) -> - $.forceSync @key - oldVal = @get {boardID, threadID, postID, val: {}} - delete oldVal[key] for key in rm or [] - $.extend oldVal, val - @setUnsafe {boardID, threadID, postID, val: oldVal}, cb + @save => + oldVal = @get {boardID, threadID, postID, val: {}} + delete oldVal[key] for key in rm or [] + $.extend oldVal, val + @setUnsafe {boardID, threadID, postID, val: oldVal} + , cb + + setLastChecked: -> + @save => + @data.lastChecked = Date.now() get: ({boardID, threadID, postID, defaultValue}) -> if board = @data.boards[boardID] @@ -74,11 +102,7 @@ class DataBoard thread val or defaultValue - forceSync: -> - $.forceSync @key - clean: -> - $.forceSync @key for boardID, val of @data.boards @deleteIfEmpty {boardID} @@ -109,7 +133,7 @@ class DataBoard threads[ID] = board[ID] if ID of board @data.boards[boardID] = threads @deleteIfEmpty {boardID} - @save() + $.set @key, @data onSync: (data) => @data = data or boards: {}