diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee index fa3d81963..206401e3c 100644 --- a/src/Monitoring/ThreadUpdater.coffee +++ b/src/Monitoring/ThreadUpdater.coffee @@ -56,7 +56,7 @@ ThreadUpdater = online: -> if ThreadUpdater.online = navigator.onLine ThreadUpdater.outdateCount = 0 - ThreadUpdater.set 'timer', ThreadUpdater.getInterval() + ThreadUpdater.setInterval() ThreadUpdater.update() if ThreadUpdater.isUpdating ThreadUpdater.set 'status', null, null else @@ -72,7 +72,7 @@ ThreadUpdater = # Reset the counter when we focus this tab. ThreadUpdater.outdateCount = 0 if ThreadUpdater.seconds > ThreadUpdater.interval - ThreadUpdater.set 'timer', ThreadUpdater.getInterval() + ThreadUpdater.setInterval() scrollBG: -> ThreadUpdater.scrollBG = if Conf['Scroll BG'] -> true @@ -81,32 +81,38 @@ ThreadUpdater = autoUpdate: (e) -> ThreadUpdater.isUpdating = @checked if e if ThreadUpdater.isUpdating and ThreadUpdater.online - ThreadUpdater.timeoutID = setTimeout ThreadUpdater.timeout, 1000 + ThreadUpdater.timeout() else clearTimeout ThreadUpdater.timeoutID interval: (e) -> val = Math.max 5, parseInt @value, 10 ThreadUpdater.interval = @value = val $.cb.value.call @ if e - load: -> + load: (e) -> {req} = ThreadUpdater + 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() + return switch req.status when 200 g.DEAD = false ThreadUpdater.parse JSON.parse(req.response).posts - ThreadUpdater.set 'timer', ThreadUpdater.getInterval() + ThreadUpdater.setInterval() when 404 g.DEAD = true ThreadUpdater.set 'timer', null ThreadUpdater.set 'status', '404', 'warning' - clearTimeout ThreadUpdater.timeoutID ThreadUpdater.thread.kill() $.event 'ThreadUpdate', 404: true thread: ThreadUpdater.thread else ThreadUpdater.outdateCount++ - ThreadUpdater.set 'timer', ThreadUpdater.getInterval() + ThreadUpdater.setInterval() [text, klass] = if req.status is 304 [null, null] else @@ -114,13 +120,16 @@ ThreadUpdater = ThreadUpdater.set 'status', text, klass delete ThreadUpdater.req - getInterval: -> + setInterval: -> i = ThreadUpdater.interval j = Math.min ThreadUpdater.outdateCount, 10 unless d.hidden # Lower the max refresh rate limit on visible tabs. 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() set: (name, text, klass) -> el = ThreadUpdater[name] @@ -134,24 +143,21 @@ ThreadUpdater = timeout: -> ThreadUpdater.timeoutID = setTimeout ThreadUpdater.timeout, 1000 - unless n = --ThreadUpdater.seconds - ThreadUpdater.update() - else if n <= -60 - ThreadUpdater.set 'status', 'Retrying', null - ThreadUpdater.update() - else if n > 0 - ThreadUpdater.set 'timer', n + ThreadUpdater.set 'timer', --ThreadUpdater.seconds + ThreadUpdater.update() if ThreadUpdater.seconds <= 0 update: -> return unless ThreadUpdater.online - ThreadUpdater.seconds = 0 + clearTimeout ThreadUpdater.timeoutID ThreadUpdater.set 'timer', '...' - if ThreadUpdater.req - # abort() triggers onloadend, we don't want that. - ThreadUpdater.req.onloadend = null - ThreadUpdater.req.abort() + ThreadUpdater.req.abort() if ThreadUpdater.req url = "//api.4chan.org/#{ThreadUpdater.thread.board}/res/#{ThreadUpdater.thread}.json" - ThreadUpdater.req = $.ajax url, onloadend: ThreadUpdater.cb.load, + ThreadUpdater.req = $.ajax url, + onabort: ThreadUpdater.cb.load + onloadend: ThreadUpdater.cb.load + ontimeout: ThreadUpdater.cb.load + timeout: $.MINUTE + , whenModified: true updateThreadStatus: (title, OP) ->