diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee index 206401e3c..9b91c1c5d 100644 --- a/src/Monitoring/ThreadUpdater.coffee +++ b/src/Monitoring/ThreadUpdater.coffee @@ -24,7 +24,6 @@ ThreadUpdater = ThreadUpdater.thread = @ ThreadUpdater.root = @OP.nodes.root.parentNode ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0] - ThreadUpdater.outdateCount = 0 for input in $$ 'input', ThreadUpdater.dialog if input.type is 'checkbox' @@ -36,7 +35,6 @@ ThreadUpdater = when 'Auto Update This' $.off input, 'change', $.cb.checked $.on input, 'change', ThreadUpdater.cb.autoUpdate - $.event 'change', null, input when 'Interval' $.on input, 'change', ThreadUpdater.cb.interval ThreadUpdater.cb.interval.call input @@ -54,15 +52,14 @@ ThreadUpdater = cb: online: -> - if ThreadUpdater.online = navigator.onLine + if navigator.onLine ThreadUpdater.outdateCount = 0 ThreadUpdater.setInterval() - ThreadUpdater.update() if ThreadUpdater.isUpdating ThreadUpdater.set 'status', null, null else ThreadUpdater.set 'timer', null ThreadUpdater.set 'status', 'Offline', 'warning' - ThreadUpdater.cb.autoUpdate() + ThreadUpdater.count true post: (e) -> return unless ThreadUpdater.isUpdating and e.detail.threadID is ThreadUpdater.thread.ID ThreadUpdater.outdateCount = 0 @@ -71,28 +68,23 @@ ThreadUpdater = return if d.hidden # Reset the counter when we focus this tab. ThreadUpdater.outdateCount = 0 - if ThreadUpdater.seconds > ThreadUpdater.interval - ThreadUpdater.setInterval() + ThreadUpdater.seconds = Math.min ThreadUpdater.seconds, ThreadUpdater.interval scrollBG: -> ThreadUpdater.scrollBG = if Conf['Scroll BG'] -> true else -> not d.hidden autoUpdate: (e) -> - ThreadUpdater.isUpdating = @checked if e - if ThreadUpdater.isUpdating and ThreadUpdater.online - ThreadUpdater.timeout() - else - clearTimeout ThreadUpdater.timeoutID + ThreadUpdater.count ThreadUpdater.isUpdating = @checked interval: (e) -> val = Math.max 5, parseInt @value, 10 ThreadUpdater.interval = @value = val $.cb.value.call @ if e load: (e) -> {req} = ThreadUpdater + delete ThreadUpdater.req if e.type isnt 'loadend' # timeout or abort req.onloadend = null - delete ThreadUpdater.req if e.type is 'timeout' ThreadUpdater.set 'status', 'Retrying', null ThreadUpdater.update() @@ -118,7 +110,6 @@ ThreadUpdater = else ["#{req.statusText} (#{req.status})", 'warning'] ThreadUpdater.set 'status', text, klass - delete ThreadUpdater.req setInterval: -> i = ThreadUpdater.interval @@ -128,8 +119,7 @@ ThreadUpdater = j = Math.min j, 7 ThreadUpdater.seconds = Math.max i, [0, 5, 10, 15, 20, 30, 60, 90, 120, 240, 300][j] ThreadUpdater.set 'timer', ThreadUpdater.seconds - clearTimeout ThreadUpdater.timeoutID - ThreadUpdater.timeout() + ThreadUpdater.count true set: (name, text, klass) -> el = ThreadUpdater[name] @@ -141,14 +131,19 @@ ThreadUpdater = el.textContent = text el.className = klass if klass isnt undefined + count: (start) -> + clearTimeout ThreadUpdater.timeoutID + ThreadUpdater.timeout() if start and ThreadUpdater.isUpdating and navigator.onLine + timeout: -> ThreadUpdater.timeoutID = setTimeout ThreadUpdater.timeout, 1000 - ThreadUpdater.set 'timer', --ThreadUpdater.seconds - ThreadUpdater.update() if ThreadUpdater.seconds <= 0 + sec = ThreadUpdater.seconds-- + ThreadUpdater.set 'timer', sec + ThreadUpdater.update() if sec <= 0 update: -> - return unless ThreadUpdater.online - clearTimeout ThreadUpdater.timeoutID + return unless navigator.onLine + ThreadUpdater.count() ThreadUpdater.set 'timer', '...' ThreadUpdater.req.abort() if ThreadUpdater.req url = "//api.4chan.org/#{ThreadUpdater.thread.board}/res/#{ThreadUpdater.thread}.json"