diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 5c9089556..94a9b987d 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -150,7 +150,7 @@ ThreadWatcher = {db} = ThreadWatcher boardID = g.BOARD.ID nKilled = 0 - for threadID, data of db.data.boards[boardID] when not data?.isDead and "#{boardID}.#{threadID}" not in e.detail.threads + for threadID, data of db.data[Site.hostname].boards[boardID] when not data?.isDead and "#{boardID}.#{threadID}" not in e.detail.threads # Don't prune threads that have yet to appear in index. continue unless e.detail.threads.some (fullID) -> +fullID.split('.')[1] > threadID nKilled++ @@ -188,7 +188,7 @@ ThreadWatcher = {db} = 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 or d.hidden or not d.hasFocus() + unless now - interval < (db.data[Site.hostname].lastChecked or 0) <= now or d.hidden or not d.hasFocus() ThreadWatcher.fetchAllStatus() db.setLastChecked() ThreadWatcher.timeout = setTimeout ThreadWatcher.fetchAuto, interval @@ -288,7 +288,7 @@ ThreadWatcher = getAll: -> all = [] - for boardID, threads of ThreadWatcher.db.data.boards + for boardID, threads of ThreadWatcher.db.data[Site.hostname].boards if Conf['Current Board'] and boardID isnt g.BOARD.ID continue for threadID, data of threads when data and typeof data is 'object' diff --git a/src/classes/DataBoard.coffee b/src/classes/DataBoard.coffee index 479dabb2c..ac1e2092a 100644 --- a/src/classes/DataBoard.coffee +++ b/src/classes/DataBoard.coffee @@ -13,11 +13,8 @@ class DataBoard @sync = sync $.on d, '4chanXInitFinished', init - initData: (@allData) -> - if Site.hostname is '4chan.org' and @allData.boards - @data = @allData - else - @data = (@allData[Site.hostname] or= boards: {}) + initData: (@data) -> + @data[Site.hostname] or= boards: {} changes: [] @@ -26,72 +23,75 @@ class DataBoard @changes.push change $.get @key, {boards: {}}, (items) => return unless @changes.length - needSync = ((items[@key].version or 0) > (@allData.version or 0)) + needSync = ((items[@key].version or 0) > (@data.version or 0)) if needSync @initData items[@key] change() for change in @changes @changes = [] - @allData.version = (@allData.version or 0) + 1 - $.set @key, @allData, => + @data.version = (@data.version or 0) + 1 + $.set @key, @data, => @sync?() if needSync cb?() forceSync: (cb) -> $.get @key, {boards: {}}, (items) => - if (items[@key].version or 0) > (@allData.version or 0) + if (items[@key].version or 0) > (@data.version or 0) @initData items[@key] change() for change in @changes @sync?() cb?() - delete: ({boardID, threadID, postID}) -> + delete: ({siteID, boardID, threadID, postID}) -> + siteID or= Site.hostname @save => if postID - return unless @data.boards[boardID]?[threadID] - delete @data.boards[boardID][threadID][postID] - @deleteIfEmpty {boardID, threadID} + return unless @data[siteID].boards[boardID]?[threadID] + delete @data[siteID].boards[boardID][threadID][postID] + @deleteIfEmpty {siteID, boardID, threadID} else if threadID - return unless @data.boards[boardID] - delete @data.boards[boardID][threadID] - @deleteIfEmpty {boardID} + return unless @data[siteID].boards[boardID] + delete @data[siteID].boards[boardID][threadID] + @deleteIfEmpty {siteID, boardID} else - delete @data.boards[boardID] + delete @data[siteID].boards[boardID] - deleteIfEmpty: ({boardID, threadID}) -> + deleteIfEmpty: ({siteID, boardID, threadID}) -> if threadID - unless Object.keys(@data.boards[boardID][threadID]).length - delete @data.boards[boardID][threadID] - @deleteIfEmpty {boardID} - else unless Object.keys(@data.boards[boardID]).length - delete @data.boards[boardID] + unless Object.keys(@data[siteID].boards[boardID][threadID]).length + delete @data[siteID].boards[boardID][threadID] + @deleteIfEmpty {siteID, boardID} + else unless Object.keys(@data[siteID].boards[boardID]).length + delete @data[siteID].boards[boardID] set: (data, cb) -> @save => @setUnsafe data , cb - setUnsafe: ({boardID, threadID, postID, val}) -> + setUnsafe: ({siteID, boardID, threadID, postID, val}) -> + siteID or= Site.hostname if postID isnt undefined - ((@data.boards[boardID] or= {})[threadID] or= {})[postID] = val + ((@data[siteID].boards[boardID] or= {})[threadID] or= {})[postID] = val else if threadID isnt undefined - (@data.boards[boardID] or= {})[threadID] = val + (@data[siteID].boards[boardID] or= {})[threadID] = val else - @data.boards[boardID] = val + @data[siteID].boards[boardID] = val - extend: ({boardID, threadID, postID, val, rm}, cb) -> + extend: ({siteID, boardID, threadID, postID, val, rm}, cb) -> @save => - oldVal = @get {boardID, threadID, postID, val: {}} + oldVal = @get {siteID, boardID, threadID, postID, val: {}} delete oldVal[key] for key in rm or [] $.extend oldVal, val - @setUnsafe {boardID, threadID, postID, val: oldVal} + @setUnsafe {siteID, boardID, threadID, postID, val: oldVal} , cb - setLastChecked: -> + setLastChecked: (siteID=Site.hostname) -> @save => - @data.lastChecked = Date.now() + @data[siteID].lastChecked = Date.now() - get: ({boardID, threadID, postID, defaultValue}) -> - if board = @data.boards[boardID] + get: ({siteID, boardID, threadID, postID, defaultValue}) -> + siteID or= Site.hostname + if board = @data[siteID].boards[boardID] unless threadID? if postID? for ID, thread in board @@ -110,14 +110,15 @@ class DataBoard clean: -> # XXX not yet multisite ready return unless Site.software is 'yotsuba' + siteID = Site.hostname - for boardID, val of @data.boards - @deleteIfEmpty {boardID} + for boardID, val of @data[siteID].boards + @deleteIfEmpty {siteID, boardID} now = Date.now() - unless now - 2 * $.HOUR < (@data.lastChecked or 0) <= now - @data.lastChecked = now - for boardID of @data.boards + unless now - 2 * $.HOUR < (@data[siteID].lastChecked or 0) <= now + @data[siteID].lastChecked = now + for boardID of @data[siteID].boards @ajaxClean boardID return @@ -130,7 +131,8 @@ class DataBoard @ajaxCleanParse boardID, response1, e2.target.response ajaxCleanParse: (boardID, response1, response2) -> - return if not (board = @data.boards[boardID]) + siteID = Site.hostname + return if not (board = @data[siteID].boards[boardID]) threads = {} if response1 for page in response1 @@ -140,11 +142,11 @@ class DataBoard if response2 for ID in response2 threads[ID] = board[ID] if ID of board - @data.boards[boardID] = threads - @deleteIfEmpty {boardID} + @data[siteID].boards[boardID] = threads + @deleteIfEmpty {siteID, boardID} $.set @key, @allData onSync: (data) => - return unless (data.version or 0) > (@allData.version or 0) + return unless (data.version or 0) > (@data.version or 0) @initData data @sync?()