diff --git a/4chan_x.user.js b/4chan_x.user.js index 69e88f7ec..1215d3cee 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -20,7 +20,7 @@ // @icon data:image/gif;base64,R0lGODlhEAAQAKECAAAAAGbMM////////yH5BAEKAAIALAAAAAAQABAAAAIxlI+pq+D9DAgUoFkPDlbs7lGiI2bSVnKglnJMOL6omczxVZK3dH/41AG6Lh7i6qUoAAA7 // ==/UserScript== -/* 4chan X Beta - Version 3.0.0 - 2013-03-10 +/* 4chan X Beta - Version 3.0.0 - 2013-03-11 * http://mayhemydg.github.com/4chan-x/ * * Copyright (c) 2009-2011 James Campos @@ -1976,15 +1976,9 @@ return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide')); }, getHiddenThreads: function() { - var hiddenThreads; - hiddenThreads = $.get("hiddenThreads." + g.BOARD); - if (!hiddenThreads) { - hiddenThreads = { - threads: {} - }; - $.set("hiddenThreads." + g.BOARD, hiddenThreads); - } - return ThreadHiding.hiddenThreads = hiddenThreads; + return ThreadHiding.hiddenThreads = $.get("hiddenThreads." + g.BOARD, { + threads: {} + }); }, syncFromCatalog: function() { var hiddenThreadsOnCatalog, threadID, threads; @@ -2002,7 +1996,11 @@ } delete threads[threadID]; } - return $.set("hiddenThreads." + g.BOARD, ThreadHiding.hiddenThreads); + if (Object.keys(threads).length) { + return $.set("hiddenThreads." + g.BOARD, ThreadHiding.hiddenThreads); + } else { + return $["delete"]("hiddenThreads." + g.BOARD); + } }, menu: { init: function() { @@ -2168,15 +2166,9 @@ return $.replace($('.sideArrows', this.nodes.root), ReplyHiding.makeButton(this, 'hide')); }, getHiddenPosts: function() { - var hiddenPosts; - hiddenPosts = $.get("hiddenPosts." + g.BOARD); - if (!hiddenPosts) { - hiddenPosts = { - threads: {} - }; - $.set("hiddenPosts." + g.BOARD, hiddenPosts); - } - return ReplyHiding.hiddenPosts = hiddenPosts; + return ReplyHiding.hiddenPosts = $.get("hiddenPosts." + g.BOARD, { + threads: {} + }); }, menu: { init: function() { @@ -3691,22 +3683,15 @@ Misc = { clearThreads: function(key) { - var data, now; - now = Date.now(); - data = $.get(key, { - threads: {} - }); - if (!data.lastChecked) { - data.lastChecked = now; - $.set(key, data); + var data; + if (!(data = $.get(key))) { return; } - if (data.lastChecked > now - $.DAY) { - return; - } - data.lastChecked = now; if (!Object.keys(data.threads).length) { - $.set(key, data); + $["delete"](key); + return; + } + if (data.lastChecked > Date.now() - 12 * $.HOUR) { return; } return $.ajax("//api.4chan.org/" + g.BOARD + "/catalog.json", { @@ -3724,7 +3709,12 @@ } } } + if (!Object.keys(threads).length) { + $["delete"](key); + return; + } data.threads = threads; + data.lastChecked = Date.now(); return $.set(key, data); } }); @@ -5841,6 +5831,9 @@ var watched; watched = $.get('WatchedThreads', {}); delete watched[board][threadID]; + if (!Object.keys(watched[board]).length) { + delete watched[board]; + } ThreadWatcher.refresh(watched); return $.set('WatchedThreads', watched); }, @@ -6097,7 +6090,11 @@ }, unset: function(id) { delete QR.cooldown.cooldowns[id]; - return $.set("cooldown." + g.BOARD, QR.cooldown.cooldowns); + if (Object.keys(QR.cooldown.cooldowns).length) { + return $.set("cooldown." + g.BOARD, QR.cooldown.cooldowns); + } else { + return $["delete"]("cooldown." + g.BOARD); + } }, count: function() { var cooldown, cooldowns, elapsed, hasFile, isReply, isSage, now, post, seconds, start, type, types, upSpd, upSpdAccuracy, update, _ref; diff --git a/src/features.coffee b/src/features.coffee index da68b5881..60bf0e651 100644 --- a/src/features.coffee +++ b/src/features.coffee @@ -927,11 +927,7 @@ ThreadHiding = $.prepend @OP.nodes.root, ThreadHiding.makeButton @, 'hide' getHiddenThreads: -> - hiddenThreads = $.get "hiddenThreads.#{g.BOARD}" - unless hiddenThreads - hiddenThreads = threads: {} - $.set "hiddenThreads.#{g.BOARD}", hiddenThreads - ThreadHiding.hiddenThreads = hiddenThreads + ThreadHiding.hiddenThreads = $.get "hiddenThreads.#{g.BOARD}", threads: {} syncFromCatalog: -> # Sync hidden threads from the catalog into the index. @@ -948,7 +944,10 @@ ThreadHiding = continue if threadID of threads delete threads[threadID] - $.set "hiddenThreads.#{g.BOARD}", ThreadHiding.hiddenThreads + if Object.keys(threads).length + $.set "hiddenThreads.#{g.BOARD}", ThreadHiding.hiddenThreads + else + $.delete "hiddenThreads.#{g.BOARD}" menu: init: -> @@ -1075,11 +1074,7 @@ ReplyHiding = $.replace $('.sideArrows', @nodes.root), ReplyHiding.makeButton @, 'hide' getHiddenPosts: -> - hiddenPosts = $.get "hiddenPosts.#{g.BOARD}" - unless hiddenPosts - hiddenPosts = threads: {} - $.set "hiddenPosts.#{g.BOARD}", hiddenPosts - ReplyHiding.hiddenPosts = hiddenPosts + ReplyHiding.hiddenPosts = $.get "hiddenPosts.#{g.BOARD}", threads: {} menu: init: -> @@ -2364,29 +2359,25 @@ Get = Misc = # super semantic clearThreads: (key) -> - now = Date.now() - data = $.get key, threads: {} - - unless data.lastChecked - data.lastChecked = now - $.set key, data - return - - return if data.lastChecked > now - $.DAY - - data.lastChecked = now + return unless data = $.get key unless Object.keys(data.threads).length - $.set key, data + $.delete key return + return if data.lastChecked > Date.now() - 12 * $.HOUR + $.ajax "//api.4chan.org/#{g.BOARD}/catalog.json", onload: -> threads = {} for obj in JSON.parse @response for thread in obj.threads if thread.no of data.threads threads[thread.no] = data.threads[thread.no] - data.threads = threads + unless Object.keys(threads).length + $.delete key + return + data.threads = threads + data.lastChecked = Date.now() $.set key, data Quotify = @@ -4012,6 +4003,7 @@ ThreadWatcher = unwatch: (board, threadID) -> watched = $.get 'WatchedThreads', {} delete watched[board][threadID] + delete watched[board] unless Object.keys(watched[board]).length ThreadWatcher.refresh watched $.set 'WatchedThreads', watched diff --git a/src/qr.coffee b/src/qr.coffee index a7c46cd48..1b14e729d 100644 --- a/src/qr.coffee +++ b/src/qr.coffee @@ -192,7 +192,10 @@ QR = QR.cooldown.start() unset: (id) -> delete QR.cooldown.cooldowns[id] - $.set "cooldown.#{g.BOARD}", QR.cooldown.cooldowns + if Object.keys(QR.cooldown.cooldowns).length + $.set "cooldown.#{g.BOARD}", QR.cooldown.cooldowns + else + $.delete "cooldown.#{g.BOARD}" count: -> unless Object.keys(QR.cooldown.cooldowns).length $.delete "#{g.BOARD}.cooldown"