diff --git a/4chan_x.user.js b/4chan_x.user.js index 6dd950b45..3f9626920 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -2875,7 +2875,13 @@ $.on(input, 'click', this.update); } } - return $.add(d.body, dialog); + $.add(d.body, dialog); + return $.on(d, 'visibilitychange ovisibilitychange mozvisibilitychange webkitvisibilitychange', function() { + Updater.unsuccessfulFetchCount = 0; + if (Updater.timer.textContent < -Conf['Interval']) { + return Updater.timer.textContent = -Updater.getInterval(); + } + }); }, cb: { interval: function() { @@ -2883,7 +2889,7 @@ val = parseInt(this.value, 10); this.value = val > 5 ? val : 5; $.cb.value.call(this); - return Updater.timer.textContent = "-" + (Updater.getInterval()); + return Updater.timer.textContent = -Updater.getInterval(); }, verbose: function() { if (Conf['Verbose']) { @@ -2937,7 +2943,7 @@ return; } Updater.unsuccessfulFetchCount++; - Updater.timer.textContent = "-" + (Updater.getInterval()); + Updater.timer.textContent = -Updater.getInterval(); /* Status Code 304: Not modified By sending the `If-Modified-Since` header we get a proper status code, and no response. @@ -2975,7 +2981,7 @@ return; } Updater.unsuccessfulFetchCount = 0; - Updater.timer.textContent = "-" + (Updater.getInterval()); + Updater.timer.textContent = -Updater.getInterval(); scroll = Conf['Scrolling'] && Updater.scrollBG() && lastPost.getBoundingClientRect().bottom - d.documentElement.clientHeight < 25; $.add(Updater.thread, nodes.reverse()); if (scroll) { @@ -2987,6 +2993,9 @@ var i, j; i = +Conf['Interval']; j = Math.min(this.unsuccessfulFetchCount, 9); + if (!(d.hidden || d.oHidden || d.mozHidden || d.webkitHidden)) { + j = Math.min(j, 6); + } return Math.max(i, [5, 10, 15, 20, 30, 60, 90, 120, 300, 600][j]); }, timeout: function() { diff --git a/script.coffee b/script.coffee index 2d2be6cee..a9556d2d3 100644 --- a/script.coffee +++ b/script.coffee @@ -2306,12 +2306,18 @@ Updater = $.add d.body, dialog + $.on d, 'visibilitychange ovisibilitychange mozvisibilitychange webkitvisibilitychange', -> + # Reset the counter when we focus this tab. + Updater.unsuccessfulFetchCount = 0 + if Updater.timer.textContent < -Conf['Interval'] + Updater.timer.textContent = -Updater.getInterval() + cb: interval: -> val = parseInt @value, 10 @value = if val > 5 then val else 5 $.cb.value.call @ - Updater.timer.textContent = "-#{Updater.getInterval()}" + Updater.timer.textContent = -Updater.getInterval() verbose: -> if Conf['Verbose'] Updater.count.textContent = '+0' @@ -2355,7 +2361,7 @@ Updater = return Updater.unsuccessfulFetchCount++ - Updater.timer.textContent = "-#{Updater.getInterval()}" + Updater.timer.textContent = -Updater.getInterval() ### Status Code 304: Not modified @@ -2389,7 +2395,7 @@ Updater = return unless count Updater.unsuccessfulFetchCount = 0 - Updater.timer.textContent = "-#{Updater.getInterval()}" + Updater.timer.textContent = -Updater.getInterval() scroll = Conf['Scrolling'] && Updater.scrollBG() && lastPost.getBoundingClientRect().bottom - d.documentElement.clientHeight < 25 $.add Updater.thread, nodes.reverse() @@ -2399,6 +2405,9 @@ Updater = getInterval: -> i = +Conf['Interval'] j = Math.min @unsuccessfulFetchCount, 9 + unless d.hidden or d.oHidden or d.mozHidden or d.webkitHidden + # Don't increase the refresh rate too much on visible tabs. + j = Math.min j, 6 Math.max i, [5, 10, 15, 20, 30, 60, 90, 120, 300, 600][j] timeout: ->