Rewrite ThreadWatcher DataBoard use to reduce use of forceSync. #1012

This commit is contained in:
ccd0 2016-09-17 20:57:34 -07:00
parent b98a0d48be
commit 3f63be3cec
2 changed files with 11 additions and 26 deletions

View File

@ -122,11 +122,8 @@ ThreadWatcher =
$.event 'CloseMenu'
pruneDeads: ->
return if $.hasClass @, 'disabled'
ThreadWatcher.db.forceSync()
for {boardID, threadID, data} in ThreadWatcher.getAll() when data.isDead
delete ThreadWatcher.db.data.boards[boardID][threadID]
ThreadWatcher.db.deleteIfEmpty {boardID}
ThreadWatcher.db.save()
ThreadWatcher.db.delete {boardID, threadID}
ThreadWatcher.refresh()
$.event 'CloseMenu'
toggle: ->
@ -145,21 +142,19 @@ ThreadWatcher =
onIndexRefresh: ->
{db} = ThreadWatcher
boardID = g.BOARD.ID
db.forceSync()
nKilled = 0
for threadID, data of db.data.boards[boardID] when not data?.isDead and threadID not of g.BOARD.threads
nKilled++
if Conf['Auto Prune'] or not (data and typeof data is 'object') # corrupt data
db.delete {boardID, threadID}
else
db.extend {boardID, threadID, val: {isDead: true}}
if ThreadWatcher.unreadEnabled and Conf['Show Unread Count']
ThreadWatcher.fetchStatus {boardID, threadID, data}
data.isDead = true
db.set {boardID, threadID, val: data}
ThreadWatcher.refresh() if nKilled
onThreadRefresh: (e) ->
thread = g.threads[e.detail.threadID]
return unless e.detail[404] and ThreadWatcher.db.get {boardID: thread.board.ID, threadID: thread.ID}
return unless e.detail[404] and ThreadWatcher.isWatched thread
# Update dead status.
ThreadWatcher.add thread
@ -184,8 +179,8 @@ ThreadWatcher =
interval = if ThreadWatcher.unreadEnabled and Conf['Show Unread Count'] then 5 * $.MINUTE else 2 * $.HOUR
now = Date.now()
if now >= (db.data.lastChecked or 0) + interval
ThreadWatcher.fetchAllStatus() # calls forceSync
db.data.lastChecked = now
ThreadWatcher.fetchAllStatus()
db.save()
ThreadWatcher.timeout = setTimeout ThreadWatcher.fetchAuto, interval
@ -261,20 +256,14 @@ ThreadWatcher =
quotingYou++
if isDead isnt data.isDead or unread isnt data.unread or quotingYou isnt data.quotingYou
data.isDead = isDead
data.unread = unread
data.quotingYou = quotingYou
ThreadWatcher.db.set {boardID, threadID, val: data}
ThreadWatcher.db.extend {boardID, threadID, val: {isDead, unread, quotingYou}}
ThreadWatcher.refresh()
else if @status is 404
if Conf['Auto Prune']
ThreadWatcher.db.delete {boardID, threadID}
else
data.isDead = true
delete data.unread
delete data.quotingYou
ThreadWatcher.db.set {boardID, threadID, val: data}
ThreadWatcher.db.extend {boardID, threadID, val: {isDead: true}, rm: ['unread', 'quotingYou']}
ThreadWatcher.refresh()
@ -368,10 +357,8 @@ ThreadWatcher =
n = 0
n++ for key, val of newData when data[key] isnt val
return unless n
ThreadWatcher.db.forceSync()
return unless data = ThreadWatcher.db.get {boardID, threadID}
$.extend data, newData
ThreadWatcher.db.set {boardID, threadID, val: data}
return unless (data = ThreadWatcher.db.get {boardID, threadID})
ThreadWatcher.db.extend {boardID, threadID, val: newData}
if line = $ "#watched-threads > [data-full-i-d='#{boardID}.#{threadID}']", ThreadWatcher.dialog
newLine = ThreadWatcher.makeLine boardID, threadID, data
$.replace line, newLine
@ -385,10 +372,7 @@ ThreadWatcher =
ThreadWatcher.db.delete {boardID, threadID}
return cb()
return cb() if data.isDead and not (data.unread? or data.quotingYou?)
data.isDead = true
delete data.unread
delete data.quotingYou
ThreadWatcher.db.set {boardID, threadID, val: data}, cb
ThreadWatcher.db.extend {boardID, threadID, val: {isDead: true}, rm: ['unread', 'quotingYou']}, cb
toggle: (thread) ->
boardID = thread.board.ID

View File

@ -51,9 +51,10 @@ class DataBoard
@data.boards[boardID] = val
@save cb
extend: ({boardID, threadID, postID, val}, 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