]> code.delx.au - comingnext/commitdiff
reload calendar data every 6 hours only, updating display without actually reloading...
authorMichael Prager <michael@pragers.de>
Tue, 29 Mar 2011 00:38:19 +0000 (02:38 +0200)
committerMichael Prager <michael@pragers.de>
Thu, 12 May 2011 15:06:16 +0000 (17:06 +0200)
comingNext/index.html

index 2dd85d774b2fcfc8b6515d92378694cd1f36200d..b0f844c11ebbad68e14f85d1fd63e36e64e9fdf5 100644 (file)
@@ -99,8 +99,11 @@ var calendarList = [];
 var calendarColors = [];\r
 var updateTimer = null;\r
 var screenRotationTimer = null;\r
-var lastUpdateTime = now;\r
+var lastUpdateTime = now; // last time we updated the display
+var lastReloadTime = null; // last time we fetched calendar data
+var reloadInterval = 6 * 60 * 60 * 1000; // = 6 hours; time interval for reloading calendar data
 var errorOccured = false;\r
+var entryLists = null; // stores all fetched calendar entries until data is refreshed
 \r
 // vars for daylight saving time\r
 var summertime = false; // true, if current date is in summer, false if in winter\r
@@ -365,6 +368,7 @@ function cancelNotification()
 function callback(transId, eventCode, result)\r
 {\r
        log("callback(): panelNum: %d  transId: %d  eventCode: %d result.ErrorCode: %d", panelNum, transId, eventCode, result.ErrorCode);
+       lastReloadTime = null; // force calendar data reload on next update
        updateData();\r
 }\r
 \r
@@ -531,65 +535,72 @@ function updateData()
                updateCalendarColors();\r
                cancelNotification();\r
                requestNotification();\r
+               lastReloadTime = null; // force calendar data reload on this update
        }\r
-       \r
-       try {\r
-               // meetings have time\r
-               // note: anniveraries have a start time of 12:00am. So since we want to include them, we have to query the whole day and check if events have passed later\r
-               now = new Date();\r
-               summertime = isSummertime(now); // cache summer time info for today\r
-               var meetingList = [];\r
-               for(var i=0; i < calendarList.length; i++) {\r
-                       // ignore excluded calendars\r
-                       if (config['excludedCalendars'].Value.indexOf(calendarList[i]) != -1)\r
-                               continue;\r
-                       var meetingListFiltering = {\r
-                               Type:'CalendarEntry',\r
-                               Filter:{\r
-                                       CalendarName: calendarList[i],\r
-                                       StartRange: (new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0)),\r
-                                       EndRange: (new Date(now.getFullYear(), now.getMonth() + config['monthRange'].Value, now.getDate(), 0, 0, 0))\r
-                               }\r
-                       }\r
-                       var meetingResult = calendarService.IDataSource.GetList(meetingListFiltering);\r
-                       if (meetingResult.ErrorCode != 0)\r
-                               throw("Error fetching calendar data: " + meetingResult.ErrorCode + ': ' + meetingResult.ErrorMessage);\r
-                       var list = meetingResult.ReturnValue;\r
-                       meetingList = meetingList.concat(listToArray(list, calendarList[i]));\r
-               }\r
-               console.info("updateData(): meetingList.sort()");\r
-               meetingList.sort(sortCalendarEntries);\r
 \r
-               // todos don't, they start on 00:00 hrs., but should be visible anyway\r
-               // this will generate a list of passed todos. We have to check if they have been marked as "done" yet\r
-               if (config['includeTodos'].Value) {\r
-                       var todayTodoList = [];\r
+       now = new Date();
+       
+       // only reload calendar data every 6 hours, visual updates occure more often
+       if (!lastReloadTime || now.getTime() - lastReloadTime.getTime() > reloadInterval) {
+               log('updateData(): reloading calendar data');
+               try {
+                       // meetings have time
+                       // note: anniveraries have a start time of 12:00am. So since we want to include them, we have to query the whole day and check if events have passed later
+                       summertime = isSummertime(now); // cache summer time info for today
+                       var meetingList = [];
                        for(var i=0; i < calendarList.length; i++) {\r
                                // ignore excluded calendars\r
                                if (config['excludedCalendars'].Value.indexOf(calendarList[i]) != -1)\r
                                        continue;\r
-                               var todayTodoListFiltering = {\r
+                               var meetingListFiltering = {
                                        Type:'CalendarEntry',\r
                                        Filter:{\r
                                                CalendarName: calendarList[i],\r
-                                               Type: 'ToDo',\r
-                                               StartRange: (new Date(now.getFullYear() - 1, now.getMonth(), now.getDate(), 0, 0, 0)),\r
-                                               EndRange: (new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 1))\r
+                                               StartRange: (new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0)),
+                                               EndRange: (new Date(now.getFullYear(), now.getMonth() + config['monthRange'].Value, now.getDate(), 0, 0, 0))
+                                       }
+                               }
+                               var meetingResult = calendarService.IDataSource.GetList(meetingListFiltering);
+                               if (meetingResult.ErrorCode != 0)
+                                       throw("Error fetching calendar data: " + meetingResult.ErrorCode + ': ' + meetingResult.ErrorMessage);
+                               var list = meetingResult.ReturnValue;
+                               meetingList = meetingList.concat(listToArray(list, calendarList[i]));
+                       }
+                       log("updateData(): meetingList.sort()");
+                       meetingList.sort(sortCalendarEntries);
+
+                       // todos don't, they start on 00:00 hrs., but should be visible anyway
+                       // this will generate a list of passed todos. We have to check if they have been marked as "done" yet
+                       if (config['includeTodos'].Value) {
+                               var todayTodoList = [];
+                               for(var i=0; i < calendarList.length; i++) {
+                                       // ignore excluded calendars
+                                       if (config['excludedCalendars'].Value.indexOf(calendarList[i]) != -1)
+                                               continue;
+                                       var todayTodoListFiltering = {
+                                               Type:'CalendarEntry',
+                                               Filter:{
+                                                       CalendarName: calendarList[i],
+                                                       Type: 'ToDo',
+                                                       StartRange: (new Date(now.getFullYear() - 1, now.getMonth(), now.getDate(), 0, 0, 0)),
+                                                       EndRange: (new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 1))
+                                               }
                                        }\r
+                                       var todayTodoResult = calendarService.IDataSource.GetList(todayTodoListFiltering);
+                                       var list = todayTodoResult.ReturnValue;
+                                       todayTodoList = todayTodoList.concat(listToArray(list, calendarList[i]));
                                }\r
-                               var todayTodoResult = calendarService.IDataSource.GetList(todayTodoListFiltering);\r
-                               var list = todayTodoResult.ReturnValue;\r
-                               todayTodoList = todayTodoList.concat(listToArray(list, calendarList[i]));\r
+                               log("updateData(): todayTodoList.sort()");
+                               todayTodoList.sort(sortCalendarEntries);
+                               entryLists = [todayTodoList, meetingList];
+                       } else {
+                               entryLists = [meetingList];
                        }\r
-                       console.info("updateData(): todayTodoList.sort()");\r
-                       todayTodoList.sort(sortCalendarEntries);\r
-                       var entryLists = [todayTodoList, meetingList];\r
-               } else {\r
-                       var entryLists = [meetingList];\r
+                       lastReloadTime = new Date();
+               } catch(e) {
+                       error('loading Calendar items list:' + e + ', line ' + e.line);
+                       return;
                }\r
-       } catch(e) {\r
-               error('loading Calendar items list:' + e + ', line ' + e.line);\r
-               return;\r
        }\r
 \r
        try {\r
@@ -622,16 +633,18 @@ function updateData()
                else\r
                        max = 30; // we can display a lot more events in fullscreen mode\r
 \r
-               var listinfo = "";\r
-               for (var i=0; i < entryLists.length; i++) {\r
-                       listinfo = listinfo + " " + entryLists[i].length;\r
-                       var entrieslist = "";\r
-                       for (var j=0; j < entryLists[i].length; j++) {\r
-                               entrieslist += entryLists[i][j].Summary + ", ";\r
+               if (config['enableLogging'].Value) {
+                       var listinfo = "";
+                       for (var i=0; i < entryLists.length; i++) {
+                               listinfo = listinfo + " " + entryLists[i].length;
+                               var entrieslist = "";
+                               for (var j=0; j < entryLists[i].length; j++) {
+                                       entrieslist += entryLists[i][j].Summary + ", ";
+                               }
+                               log("updateData(): entrieslist: " + entrieslist);
                        }\r
-                       console.info("updateData(): entrieslist: " + entrieslist);\r
+                       log("updateData(): inner loop, " + entryLists.length + " lists, [" + listinfo + "] entries");
                }\r
-               console.info("updateData(): inner loop, " + entryLists.length + " lists, [" + listinfo + "] entries");\r
                \r
                // the first outer loop iteration is for passed ToDos, the second loop is for all upcomming events (may also include ToDos)\r
                for (var i=0; counter < max && i < entryLists.length; i++) {\r
@@ -1176,6 +1189,7 @@ function saveSettings()
                error("saveSettings: " + e + ', line ' + e.line);\r
        }\r
        \r
+       lastReloadTime = null; // force calendar data reload on next update
        clearUpdateTimer();\r
        setUpdateTimer();\r
 }\r