From 12d9339ded6daf66e145d324f604fe069e45e801 Mon Sep 17 00:00:00 2001 From: Fabien Benetou Date: Thu, 14 Jul 2011 16:12:15 +0200 Subject: [PATCH] timer and threshold working, background time to not though --- greasemonkey/virtualblinders.user.js | 71 ++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/greasemonkey/virtualblinders.user.js b/greasemonkey/virtualblinders.user.js index f52a1a5..bdea8d1 100644 --- a/greasemonkey/virtualblinders.user.js +++ b/greasemonkey/virtualblinders.user.js @@ -6,9 +6,12 @@ // ==/UserScript== /* TODO - +# handle background tab +## stop timer when focus lost window.onunload or window.onblur +## restart timer when focus is back window.load or window.onfocus +## XXX failing so far # improve the list of websites to include -## consider include * then refine pattern per task +## consider include * then refine window.location pattern per task # make timers (default to 0 sec, value defined via the script or a GM_Value) to be more flexible ## reset timer either manually or per day (i.e.) reset if last set date <5AM ## set 2 thresholds, the first as a warning, the second as an action @@ -26,17 +29,65 @@ GM_xmlhttpRequest({ url: "http://fabien.benetou.fr/pub/currenttask", onload: function(response) { task = response.responseText; - if (task == 'Reading\n' || task == 'Programming\n'){ - //document.body.innerHTML="You should be focusing on "+task+" instead,\nare you sure you need that information from that website?"; - document.body.innerHTML="You should be focusing on "+task+" instead,\nare you sure you need that information from that website?
Note that you have already spent "+time_spent+" seconds on that website so far!
"+document.body.innerHTML; - t=setInterval(mytimer,1000); - //see http://commons.oreilly.com/wiki/index.php/Greasemonkey_Hacks/Getting_Started#Pitfall_.231:_Auto-eval_Strings + responseCheck(task); } - } }); -function mytimer(){ +function responseCheck(task) { + //task = 'Reading\n'; + timeThreshold = 600; + aboveThreshold = ( timeThreshold < time_spent ); + //aboveThreshold = true; + if (task == 'Reading\n' || task == 'Programming\n'){ + if ( !aboveThreshold ) { + //under threshold, just display a warning and the content + document.body.innerHTML="You should be focusing on " + + task + " instead,\nare you sure you need that information from that website?" + + "
Note that you have already spent " + + time_spent + " seconds on that website so far!" + + "(which still is under the threshold of "+timeThreshold+" seconds)
" + +document.body.innerHTML; + t=window.setInterval(mytimer,1000); + //regarding the specific syntax + //see http://commons.oreilly.com/wiki/index.php/Greasemonkey_Hacks/Getting_Started#Pitfall_.231:_Auto-eval_Strings + GM_log("register listeners"); + window.addEventListener("onblur", stopTimer, true); + window.addEventListener("onfocus", restartTimer, true); + window.addEventListener("onunload", setTotalTimeSpent, true); + } else { + //above threshold, only display the warning without the content + document.body.innerHTML="You should be focusing on " + + task + " instead,\nare you sure you need that information from that website?" + + "
Note that you have already spent " + + time_spent + " seconds on that website so far!
" + + "(which is above the allowed threshold of "+timeThreshold+" seconds)
"; + } + } +} + +function mytimer() { + //GM_log("timer tick"); time_spent=time_spent+1; - document.getElementById('timespent').innerText=time_spent; + //fail document.getElementById('timespent').innerText=time_spent; + GM_setValue(MODE,time_spent); + // this should only be un setTotalTimeSpent() but since the events do not work this will remain here for now +} + +function stopTimer() { + GM_log("stop timer"); + // never called! + window.clearInterval(t); + // tested and worked, t value is correct +} + +function restartTimer() { + GM_log("restart timer"); + t=window.setInterval(mytimer,1000); +} + +function setTotalTimeSpent() { + GM_log("set total time spent"); GM_setValue(MODE,time_spent); }