Support access to DataBoard data of other sites.
This commit is contained in:
parent
ff78b283ac
commit
1fbe76e3cd
@ -150,7 +150,7 @@ ThreadWatcher =
|
|||||||
{db} = ThreadWatcher
|
{db} = ThreadWatcher
|
||||||
boardID = g.BOARD.ID
|
boardID = g.BOARD.ID
|
||||||
nKilled = 0
|
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.
|
# Don't prune threads that have yet to appear in index.
|
||||||
continue unless e.detail.threads.some (fullID) -> +fullID.split('.')[1] > threadID
|
continue unless e.detail.threads.some (fullID) -> +fullID.split('.')[1] > threadID
|
||||||
nKilled++
|
nKilled++
|
||||||
@ -188,7 +188,7 @@ ThreadWatcher =
|
|||||||
{db} = ThreadWatcher
|
{db} = ThreadWatcher
|
||||||
interval = if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] then 5 * $.MINUTE else 2 * $.HOUR
|
interval = if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] then 5 * $.MINUTE else 2 * $.HOUR
|
||||||
now = Date.now()
|
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()
|
ThreadWatcher.fetchAllStatus()
|
||||||
db.setLastChecked()
|
db.setLastChecked()
|
||||||
ThreadWatcher.timeout = setTimeout ThreadWatcher.fetchAuto, interval
|
ThreadWatcher.timeout = setTimeout ThreadWatcher.fetchAuto, interval
|
||||||
@ -288,7 +288,7 @@ ThreadWatcher =
|
|||||||
|
|
||||||
getAll: ->
|
getAll: ->
|
||||||
all = []
|
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
|
if Conf['Current Board'] and boardID isnt g.BOARD.ID
|
||||||
continue
|
continue
|
||||||
for threadID, data of threads when data and typeof data is 'object'
|
for threadID, data of threads when data and typeof data is 'object'
|
||||||
|
|||||||
@ -13,11 +13,8 @@ class DataBoard
|
|||||||
@sync = sync
|
@sync = sync
|
||||||
$.on d, '4chanXInitFinished', init
|
$.on d, '4chanXInitFinished', init
|
||||||
|
|
||||||
initData: (@allData) ->
|
initData: (@data) ->
|
||||||
if Site.hostname is '4chan.org' and @allData.boards
|
@data[Site.hostname] or= boards: {}
|
||||||
@data = @allData
|
|
||||||
else
|
|
||||||
@data = (@allData[Site.hostname] or= boards: {})
|
|
||||||
|
|
||||||
changes: []
|
changes: []
|
||||||
|
|
||||||
@ -26,72 +23,75 @@ class DataBoard
|
|||||||
@changes.push change
|
@changes.push change
|
||||||
$.get @key, {boards: {}}, (items) =>
|
$.get @key, {boards: {}}, (items) =>
|
||||||
return unless @changes.length
|
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
|
if needSync
|
||||||
@initData items[@key]
|
@initData items[@key]
|
||||||
change() for change in @changes
|
change() for change in @changes
|
||||||
@changes = []
|
@changes = []
|
||||||
@allData.version = (@allData.version or 0) + 1
|
@data.version = (@data.version or 0) + 1
|
||||||
$.set @key, @allData, =>
|
$.set @key, @data, =>
|
||||||
@sync?() if needSync
|
@sync?() if needSync
|
||||||
cb?()
|
cb?()
|
||||||
|
|
||||||
forceSync: (cb) ->
|
forceSync: (cb) ->
|
||||||
$.get @key, {boards: {}}, (items) =>
|
$.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]
|
@initData items[@key]
|
||||||
change() for change in @changes
|
change() for change in @changes
|
||||||
@sync?()
|
@sync?()
|
||||||
cb?()
|
cb?()
|
||||||
|
|
||||||
delete: ({boardID, threadID, postID}) ->
|
delete: ({siteID, boardID, threadID, postID}) ->
|
||||||
|
siteID or= Site.hostname
|
||||||
@save =>
|
@save =>
|
||||||
if postID
|
if postID
|
||||||
return unless @data.boards[boardID]?[threadID]
|
return unless @data[siteID].boards[boardID]?[threadID]
|
||||||
delete @data.boards[boardID][threadID][postID]
|
delete @data[siteID].boards[boardID][threadID][postID]
|
||||||
@deleteIfEmpty {boardID, threadID}
|
@deleteIfEmpty {siteID, boardID, threadID}
|
||||||
else if threadID
|
else if threadID
|
||||||
return unless @data.boards[boardID]
|
return unless @data[siteID].boards[boardID]
|
||||||
delete @data.boards[boardID][threadID]
|
delete @data[siteID].boards[boardID][threadID]
|
||||||
@deleteIfEmpty {boardID}
|
@deleteIfEmpty {siteID, boardID}
|
||||||
else
|
else
|
||||||
delete @data.boards[boardID]
|
delete @data[siteID].boards[boardID]
|
||||||
|
|
||||||
deleteIfEmpty: ({boardID, threadID}) ->
|
deleteIfEmpty: ({siteID, boardID, threadID}) ->
|
||||||
if threadID
|
if threadID
|
||||||
unless Object.keys(@data.boards[boardID][threadID]).length
|
unless Object.keys(@data[siteID].boards[boardID][threadID]).length
|
||||||
delete @data.boards[boardID][threadID]
|
delete @data[siteID].boards[boardID][threadID]
|
||||||
@deleteIfEmpty {boardID}
|
@deleteIfEmpty {siteID, boardID}
|
||||||
else unless Object.keys(@data.boards[boardID]).length
|
else unless Object.keys(@data[siteID].boards[boardID]).length
|
||||||
delete @data.boards[boardID]
|
delete @data[siteID].boards[boardID]
|
||||||
|
|
||||||
set: (data, cb) ->
|
set: (data, cb) ->
|
||||||
@save =>
|
@save =>
|
||||||
@setUnsafe data
|
@setUnsafe data
|
||||||
, cb
|
, cb
|
||||||
|
|
||||||
setUnsafe: ({boardID, threadID, postID, val}) ->
|
setUnsafe: ({siteID, boardID, threadID, postID, val}) ->
|
||||||
|
siteID or= Site.hostname
|
||||||
if postID isnt undefined
|
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
|
else if threadID isnt undefined
|
||||||
(@data.boards[boardID] or= {})[threadID] = val
|
(@data[siteID].boards[boardID] or= {})[threadID] = val
|
||||||
else
|
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 =>
|
@save =>
|
||||||
oldVal = @get {boardID, threadID, postID, val: {}}
|
oldVal = @get {siteID, boardID, threadID, postID, val: {}}
|
||||||
delete oldVal[key] for key in rm or []
|
delete oldVal[key] for key in rm or []
|
||||||
$.extend oldVal, val
|
$.extend oldVal, val
|
||||||
@setUnsafe {boardID, threadID, postID, val: oldVal}
|
@setUnsafe {siteID, boardID, threadID, postID, val: oldVal}
|
||||||
, cb
|
, cb
|
||||||
|
|
||||||
setLastChecked: ->
|
setLastChecked: (siteID=Site.hostname) ->
|
||||||
@save =>
|
@save =>
|
||||||
@data.lastChecked = Date.now()
|
@data[siteID].lastChecked = Date.now()
|
||||||
|
|
||||||
get: ({boardID, threadID, postID, defaultValue}) ->
|
get: ({siteID, boardID, threadID, postID, defaultValue}) ->
|
||||||
if board = @data.boards[boardID]
|
siteID or= Site.hostname
|
||||||
|
if board = @data[siteID].boards[boardID]
|
||||||
unless threadID?
|
unless threadID?
|
||||||
if postID?
|
if postID?
|
||||||
for ID, thread in board
|
for ID, thread in board
|
||||||
@ -110,14 +110,15 @@ class DataBoard
|
|||||||
clean: ->
|
clean: ->
|
||||||
# XXX not yet multisite ready
|
# XXX not yet multisite ready
|
||||||
return unless Site.software is 'yotsuba'
|
return unless Site.software is 'yotsuba'
|
||||||
|
siteID = Site.hostname
|
||||||
|
|
||||||
for boardID, val of @data.boards
|
for boardID, val of @data[siteID].boards
|
||||||
@deleteIfEmpty {boardID}
|
@deleteIfEmpty {siteID, boardID}
|
||||||
|
|
||||||
now = Date.now()
|
now = Date.now()
|
||||||
unless now - 2 * $.HOUR < (@data.lastChecked or 0) <= now
|
unless now - 2 * $.HOUR < (@data[siteID].lastChecked or 0) <= now
|
||||||
@data.lastChecked = now
|
@data[siteID].lastChecked = now
|
||||||
for boardID of @data.boards
|
for boardID of @data[siteID].boards
|
||||||
@ajaxClean boardID
|
@ajaxClean boardID
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -130,7 +131,8 @@ class DataBoard
|
|||||||
@ajaxCleanParse boardID, response1, e2.target.response
|
@ajaxCleanParse boardID, response1, e2.target.response
|
||||||
|
|
||||||
ajaxCleanParse: (boardID, response1, response2) ->
|
ajaxCleanParse: (boardID, response1, response2) ->
|
||||||
return if not (board = @data.boards[boardID])
|
siteID = Site.hostname
|
||||||
|
return if not (board = @data[siteID].boards[boardID])
|
||||||
threads = {}
|
threads = {}
|
||||||
if response1
|
if response1
|
||||||
for page in response1
|
for page in response1
|
||||||
@ -140,11 +142,11 @@ class DataBoard
|
|||||||
if response2
|
if response2
|
||||||
for ID in response2
|
for ID in response2
|
||||||
threads[ID] = board[ID] if ID of board
|
threads[ID] = board[ID] if ID of board
|
||||||
@data.boards[boardID] = threads
|
@data[siteID].boards[boardID] = threads
|
||||||
@deleteIfEmpty {boardID}
|
@deleteIfEmpty {siteID, boardID}
|
||||||
$.set @key, @allData
|
$.set @key, @allData
|
||||||
|
|
||||||
onSync: (data) =>
|
onSync: (data) =>
|
||||||
return unless (data.version or 0) > (@allData.version or 0)
|
return unless (data.version or 0) > (@data.version or 0)
|
||||||
@initData data
|
@initData data
|
||||||
@sync?()
|
@sync?()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user