that's actually changed. Honestly, all I wanted was the 4cdn changes, but any excuse to merge was good enough, I guess. Merge branch 'v3' of git://github.com/MayhemYDG/4chan-x into v3 Conflicts: CHANGELOG.md Gruntfile.coffee changelog-old css/style.css html/General/Settings.html html/Monitoring/ThreadUpdater.html html/Monitoring/ThreadWatcher.html html/Posting/QR.html package.json src/Filtering/ThreadHiding.coffee src/General/Build.coffee src/General/Config.coffee src/General/Header.coffee src/General/Main.coffee src/General/Settings.coffee src/General/lib/post.class src/General/meta/manifest.json src/Images/ImageExpand.coffee src/Meta/banner.js src/Miscellaneous/ExpandComment.coffee src/Miscellaneous/ExpandThread.coffee src/Miscellaneous/Keybinds.coffee src/Miscellaneous/Nav.coffee src/Monitoring/Favicon.coffee src/Monitoring/ThreadStats.coffee src/Monitoring/ThreadUpdater.coffee src/Monitoring/ThreadWatcher.coffee src/Monitoring/Unread.coffee src/Posting/QuickReply.coffee
93 lines
2.6 KiB
Plaintext
Executable File
93 lines
2.6 KiB
Plaintext
Executable File
class DataBoard
|
|
@keys = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads']
|
|
|
|
constructor: (@key, sync, dontClean) ->
|
|
@data = Conf[key]
|
|
$.sync key, @onSync
|
|
@clean() unless dontClean
|
|
return unless sync
|
|
# Chrome also fires the onChanged callback on the current tab,
|
|
# so we only start syncing when we're ready.
|
|
init = =>
|
|
$.off d, '4chanXInitFinished', init
|
|
@sync = sync
|
|
$.on d, '4chanXInitFinished', init
|
|
|
|
save: ->
|
|
$.set @key, @data
|
|
|
|
delete: ({boardID, threadID, postID}) ->
|
|
if postID
|
|
delete @data.boards[boardID][threadID][postID]
|
|
@deleteIfEmpty {boardID, threadID}
|
|
else if threadID
|
|
delete @data.boards[boardID][threadID]
|
|
@deleteIfEmpty {boardID}
|
|
else
|
|
delete @data.boards[boardID]
|
|
@save()
|
|
|
|
deleteIfEmpty: ({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]
|
|
|
|
set: ({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()
|
|
|
|
get: ({boardID, threadID, postID, defaultValue}) ->
|
|
if board = @data.boards[boardID]
|
|
unless threadID
|
|
if postID
|
|
for ID, thread in board
|
|
if postID of thread
|
|
val = thread[postID]
|
|
break
|
|
else
|
|
val = board
|
|
else if thread = board[threadID]
|
|
val = if postID
|
|
thread[postID]
|
|
else
|
|
thread
|
|
val or defaultValue
|
|
|
|
clean: ->
|
|
for boardID, val of @data.boards
|
|
@deleteIfEmpty {boardID}
|
|
|
|
now = Date.now()
|
|
if (@data.lastChecked or 0) < now - 2 * $.HOUR
|
|
@data.lastChecked = now
|
|
for boardID of @data.boards
|
|
@ajaxClean boardID
|
|
@save()
|
|
|
|
ajaxClean: (boardID) ->
|
|
$.cache "//a.4cdn.org/#{boardID}/threads.json", (e) =>
|
|
if e.target.status isnt 200
|
|
@delete boardID if e.target.status is 404
|
|
return
|
|
board = @data.boards[boardID]
|
|
threads = {}
|
|
for page in JSON.parse e.target.response
|
|
for thread in page.threads
|
|
if thread.no of board
|
|
threads[thread.no] = board[thread.no]
|
|
@data.boards[boardID] = threads
|
|
@deleteIfEmpty {boardID}
|
|
@save()
|
|
|
|
onSync: (data) =>
|
|
@data = data or boards: {}
|
|
@sync?()
|