Make use of xhr.timeout.

This commit is contained in:
Mayhem 2013-08-28 00:12:36 +02:00
parent 44bde8781f
commit a1efe855e2

View File

@ -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) ->