]> code.delx.au - comingnext/commitdiff
* fixed daylight saving times not being applied properly resulting in events being...
authorMichael Prager <michael@pragers.de>
Sun, 31 Oct 2010 18:29:08 +0000 (19:29 +0100)
committerMichael Prager <michael@pragers.de>
Sun, 31 Oct 2010 18:29:08 +0000 (19:29 +0100)
* added option to change daylight saving offset

Readme.txt
comingNext/de.lproj/localizedTextStrings.js
comingNext/fr.lproj/localizedTextStrings.js
comingNext/index.html
comingNext/localizedTextStrings.js
comingNext/pt-BR.lproj/localizedTextStrings.js
comingNext/ru.lproj/localizedTextStrings.js

index 3a22c3b3c07c78ce335e39a03dfd869f1818ff82..2472134fdaa0940269803b346ca48495bec4a661 100644 (file)
@@ -220,3 +220,8 @@ Changelog:
   - startup performance improvements\r
   - stylish default background image\r
   - first release available on Ovi Store\r
+1.30 () by Michael Prager\r
+  - fixed an issue with daylight saving time not being used properly resulting\r
+    in events around time shifts to be off by one day or hour\r
+  - added option to change daylight saving offset (for time zones which have\r
+    more than a +1h time shift)\r
index d20dc0eb0c44e17c200692265bee55090373d5fb..50393be9a13ee75fa2f193f5f9f9ab09e3d37242 100644 (file)
@@ -65,8 +65,10 @@ localizedText['settings.info.showNothingText'] = 'wenn aktiviert, wird ein Text
 localizedText['settings.name.nothingText'] = '"Keine weiteren Ereignisse..." Text';\r
 localizedText['settings.info.nothingText'] = 'Text, der gezeigt wird, wenn keine Ereignisse in der Liste sind';\r
 localizedText['settings.default.nothingText'] = 'Keine weiteren Ereignisse in den nächsten %d Monaten';\r
-localizedText['settings.name.enableDaylightSaving'] = 'Aktiviere Zeitumstellung (+1h)';\r
+localizedText['settings.name.enableDaylightSaving'] = 'Aktiviere Zeitumstellung';\r
 localizedText['settings.info.enableDaylightSaving'] = 'diese Einstellung sollte aktiviert werden, falls Sie in einer Zeitzone leben, in der die Uhren zwischen Sommer und Winter umgestellt werden';\r
+localizedText['settings.name.daylightSavingOffset'] = 'Zeitumstellungsoffset (in Stunden)';\r
+localizedText['settings.info.daylightSavingOffset'] = 'Anzahl der Stunden, um die die Uhr bei der Umstellung von Sommer- auf Winterzeit zurückgestellt wird. Diese Einstellung ist nur von Belang, falls die Zeitumstellung aktiviert ist. In Europa werden die Uhren in der Regel um 1 Stunde zurückgestellt.';\r
 localizedText['settings.name.hideWidgetOnCalendarOpen'] = 'Schließe Widget beim Öffnen des Kalend.';\r
 localizedText['settings.info.hideWidgetOnCalendarOpen'] = 'wenn aktiviert, wird das Widget geschlossen, sobald der Kalender aus dem Widget heraus gestartet wird';\r
 localizedText['settings.name.cssStyle_background'] = '.background';\r
index f69ea3ac82bc1953f78054fe5807ea4bf8034a67..a39d582db08dc5b226371fee3bf336dda5fccb7a 100644 (file)
@@ -67,6 +67,8 @@ localizedText['settings.info.nothingText'] = 'Texte &agrave; afficher quand il n
 localizedText['settings.default.nothingText'] = 'Pas d\'&eacute;v&eacute;nements durant les prochains mois';\r
 localizedText['settings.name.enableDaylightSaving'] = 'Activ&eacute; Daylight Saving';\r
 localizedText['settings.info.enableDaylightSaving'] = 'Permet d\'activer Daylight saving si vous &ecirc;tes dans une fuseau horaire où il y a daylight saving time (+1h)';\r
+localizedText['settings.name.daylightSavingOffset'] = 'Daylight Saving Offset (hours)';\r
+localizedText['settings.info.daylightSavingOffset'] = 'Number of hours your clock is shifted by daylight saving time. This setting is only relevant if daylight saving has been enabled. The default offset in europe is 1 hour.';\r
 localizedText['settings.name.hideWidgetOnCalendarOpen'] = 'Hide Widget When Opening Calendar';\r
 localizedText['settings.info.hideWidgetOnCalendarOpen'] = 'enable this if the fullscreen widget should be hidden when clicking on the widget to open the calendar app';\r
 localizedText['settings.name.cssStyle_background'] = '.background';\r
index 372489b26d8233ca5c51b5945656f5f96a3e0127..d66fd2917a992e14c4f05b49760e00b20ac8ea1c 100644 (file)
@@ -47,6 +47,7 @@ var config = {
        showNothingText: { Type: 'Bool', Default: true, Value: true,},\r
        nothingText: { Type: 'String', Default: getLocalizedText('settings.default.nothingText'), Value: getLocalizedText('settings.default.nothingText'),},\r
        enableDaylightSaving: { Type: 'Bool', Default: true, Value: true,},\r
+       daylightSavingOffset: { Type: 'Int', Default: 1, Value: 1,},\r
        hideWidgetOnCalendarOpen: { Type: 'Bool', Default: false, Value: false,},\r
        cssStyle_background: { Type: 'String', Default: 'color:#ffffff; background-color:#000000', Value: 'color:#ffffff; background-color:#000000',},\r
        cssStyle_backgroundFullscreen: { Type: 'String', Default: 'color:#ffffff; background-color:#000000', Value: 'color:#ffffff; background-color:#000000',},\r
@@ -83,9 +84,8 @@ var notificationRequest2;
 var calendarList = [];\r
 \r
 // vars for daylight saving time\r
-var daylightsavingWinter = 0;\r
-var daylightsavingSummer = 0;\r
-var summertime = false;\r
+var summertime = false; // true, if current date is in summer, false if in winter\r
+var daylightSavingDates = new Object(); // caches calculated DST winter and summer time shift dates\r
 \r
 // this is a list of data fields a calendar event can have\r
 var entryFields = [\r
@@ -127,43 +127,48 @@ function subToSunday(myDate, year, days, prevMonthDays)
        days = isLeapYear(year) ? --days : days;\r
        return days;\r
 }\r
-       \r
-function calcDaylightSaving()\r
+\r
+function isSummertime(curDate)\r
 {\r
-       var thisYearS = new Date(now.getFullYear(),  3, 0, 0, 0, 0 );\r
-       var thisYearW = new Date(now.getFullYear(), 10, 0, 0, 0, 0 );\r
-       var nextYearS = new Date(now.getFullYear() + 1,  3, 0, 0, 0, 0 );\r
-       var nextYearW = new Date(now.getFullYear() + 1, 10, 0, 0, 0, 0 );\r
        var summer = false;\r
        var winter = false;\r
-       \r
-       thisYearSDays = nextYearSDays = 90;\r
-       thisYearWDays = nextYearWDays = 304;\r
-       \r
-       thisYearSDays = calcLeapYear(now.getFullYear(), thisYearSDays);\r
-       thisYearWDays = calcLeapYear(now.getFullYear(), thisYearWDays);\r
-       nextYearSDays = calcLeapYear(now.getFullYear() + 1, nextYearSDays);\r
-       nextYearWDays = calcLeapYear(now.getFullYear() + 1, nextYearWDays);\r
-       \r
-       thisYearSDays = subToSunday(thisYearS, now.getFullYear(), thisYearSDays, 59);\r
-       thisYearWDays = subToSunday(thisYearW, now.getFullYear(), thisYearWDays, 273);\r
-       nextYearSDays = subToSunday(nextYearS, now.getFullYear() + 1, nextYearSDays, 59);\r
-       nextYearWDays = subToSunday(nextYearW, now.getFullYear() + 1, nextYearWDays, 273);\r
-       \r
-       daylightsavingSummer = new Date (now.getFullYear(), 03-1, thisYearSDays, 2, 0, 0);\r
-       daylightsavingWinter = new Date (now.getFullYear(), 10-1, thisYearWDays, 2, 0, 0);\r
-       if (daylightsavingSummer < now) {\r
-               daylightsavingSummer = new Date (now.getFullYear()+1, 03-1, nextYearSDays, 2, 0, 0);\r
-               var summer = true;\r
-       }\r
-       if (daylightsavingWinter < now) {\r
-               daylightsavingWinter = new Date (now.getFullYear()+1, 10-1, nextYearWDays, 2, 0, 0);\r
-               var winter = true;\r
+\r
+       // if we already calculated DST summer and winter time dates for this year, use cached values\r
+       var dst = daylightSavingDates[curDate.getFullYear()];\r
+       if (!dst) {\r
+               var thisYearS = new Date(curDate.getFullYear(),  3, 0, 0, 0, 0 );\r
+               var thisYearW = new Date(curDate.getFullYear(), 10, 0, 0, 0, 0 );\r
+               var nextYearS = new Date(curDate.getFullYear() + 1,  3, 0, 0, 0, 0 );\r
+               var nextYearW = new Date(curDate.getFullYear() + 1, 10, 0, 0, 0, 0 );\r
+               \r
+               thisYearSDays = nextYearSDays = 90;\r
+               thisYearWDays = nextYearWDays = 304;\r
+               \r
+               thisYearSDays = calcLeapYear(curDate.getFullYear(), thisYearSDays);\r
+               thisYearWDays = calcLeapYear(curDate.getFullYear(), thisYearWDays);\r
+               nextYearSDays = calcLeapYear(curDate.getFullYear() + 1, nextYearSDays);\r
+               nextYearWDays = calcLeapYear(curDate.getFullYear() + 1, nextYearWDays);\r
+               \r
+               thisYearSDays = subToSunday(thisYearS, curDate.getFullYear(), thisYearSDays, 59);\r
+               thisYearWDays = subToSunday(thisYearW, curDate.getFullYear(), thisYearWDays, 273);\r
+               nextYearSDays = subToSunday(nextYearS, curDate.getFullYear() + 1, nextYearSDays, 59);\r
+               nextYearWDays = subToSunday(nextYearW, curDate.getFullYear() + 1, nextYearWDays, 273);\r
+               \r
+               dst = {\r
+                       Summer: new Date (curDate.getFullYear(), 03-1, thisYearSDays, 2, 0, 0),\r
+                       Winter: new Date (curDate.getFullYear(), 10-1, thisYearWDays, 2, 0, 0),\r
+               }\r
+               daylightSavingDates[curDate.getFullYear()] = dst;\r
        }\r
+\r
+       if (dst.Summer < curDate)\r
+               summer = true;\r
+       if (dst.Winter < curDate)\r
+               winter = true;\r
        if (summer && !winter)\r
-               summertime = true;\r
+               return true;\r
        else\r
-               summertime = false;\r
+               return false;\r
 }\r
 \r
 function error(message)\r
@@ -382,18 +387,26 @@ function parseDate(dateString)
        if (dateArr.length == 6 && dateArr[5].toLowerCase() == 'am' && hours == 12)\r
                hours = 0;\r
 \r
-       console.info('year=' + year + ' month=' + month + ' day=' + day + ' hours=' + hours + ' minutes=' + minutes+ ' seconds=' + seconds);\r
-\r
+       var result = new Date(year, month - 1, day, hours, minutes, seconds);\r
+       \r
        // take care of daylight saving time\r
        if (config['enableDaylightSaving'].Value) {\r
-               var date = new Date(year, month - 1, day, hours, minutes, seconds);\r
-               if (summertime && date > daylightsavingWinter && date < daylightsavingSummer)\r
-                       hours -= 1;\r
-               else if (!summertime && date > daylightsavingSummer && date < daylightsavingWinter)\r
-                       hours += 1;\r
+               \r
+               // determine if date is in summer or winter time\r
+               var dateSummerTime = isSummertime(result);\r
+\r
+               // work around bug in Nokias calendar api resulting in dates within a different DST to be off by 1 hour\r
+               if (summertime && !dateSummerTime) {\r
+                       result = new Date(result.getTime() - 1000 * 60 * 60 * config['daylightSavingOffset'].Value); // -1 hour\r
+                       console.info('parseDate(): fixing time -1h: ' + result);\r
+               }\r
+               else if (!summertime && dateSummerTime) {\r
+                       result = new Date(result.getTime() + 1000 * 60 * 60 * config['daylightSavingOffset'].Value); // +1 hour\r
+                       console.info('parseDate(): fixing time +1h: ' + result);\r
+               }\r
        }\r
 \r
-       return new Date(year, month - 1, day, hours, minutes, seconds);\r
+       return result;\r
 }\r
 \r
 // returns a short date as string ("31.12" or "12.31") based on the format string which should look like "Wednesday,  26 August, 2009 12:00:00 am"\r
@@ -467,11 +480,11 @@ function formatTime(date)
 function updateData()\r
 {\r
        console.info('updateData()');\r
-       calcDaylightSaving();\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
                        var meetingListFiltering = {\r
index c22111d619ddc629fabb4f6b5e041486b7853e09..ef221f9808871ee48a995519b61785b6a2273a92 100644 (file)
@@ -65,8 +65,10 @@ localizedText['settings.info.showNothingText'] = 'if enabled, show a text if no
 localizedText['settings.name.nothingText'] = '"No further events..." Text';\r
 localizedText['settings.info.nothingText'] = 'text to show when no events are in the list';\r
 localizedText['settings.default.nothingText'] = 'No further events within %d months';\r
-localizedText['settings.name.enableDaylightSaving'] = 'Enable Daylight Saving (+1h)';\r
-localizedText['settings.info.enableDaylightSaving'] = 'enable this if you are in a timezone that has daylight saving time (+1h)';\r
+localizedText['settings.name.enableDaylightSaving'] = 'Enable Daylight Saving';\r
+localizedText['settings.info.enableDaylightSaving'] = 'enable this if you are in a timezone that has daylight saving time';\r
+localizedText['settings.name.daylightSavingOffset'] = 'Daylight Saving Offset (hours)';\r
+localizedText['settings.info.daylightSavingOffset'] = 'Number of hours your clock is shifted by daylight saving time. This setting is only relevant if daylight saving has been enabled. The default offset in europe is 1 hour.';\r
 localizedText['settings.name.hideWidgetOnCalendarOpen'] = 'Hide Widget When Opening Calendar';\r
 localizedText['settings.info.hideWidgetOnCalendarOpen'] = 'enable this if the fullscreen widget should be hidden when clicking on the widget to open the calendar app';\r
 localizedText['settings.name.cssStyle_background'] = '.background';\r
index 634baae95d1867d7674b2f2a1b400caebd9be7c4..67e7908b9e72d7ba5a0c3da201324b250eddae2d 100644 (file)
@@ -65,8 +65,10 @@ localizedText['settings.info.showNothingText'] = 'se ativo, apresenta um texto s
 localizedText['settings.name.nothingText'] = '"Não há mais eventos..." Texto';\r
 localizedText['settings.info.nothingText'] = 'texto apresentado quando não há eventos listados';\r
 localizedText['settings.default.nothingText'] = 'Não há mais eventos nestes %d meses';\r
-localizedText['settings.name.enableDaylightSaving'] = 'Ativa horário de verão (+1h)';\r
-localizedText['settings.info.enableDaylightSaving'] = 'ative isto se você está em uma região que tem horário de verão (+1h)';\r
+localizedText['settings.name.enableDaylightSaving'] = 'Ativa horário de verão';\r
+localizedText['settings.info.enableDaylightSaving'] = 'ative isto se você está em uma região que tem horário de verão';\r
+localizedText['settings.name.daylightSavingOffset'] = 'Daylight Saving Offset (hours)';\r
+localizedText['settings.info.daylightSavingOffset'] = 'Number of hours your clock is shifted by daylight saving time. This setting is only relevant if daylight saving has been enabled. The default offset in europe is 1 hour.';\r
 localizedText['settings.name.hideWidgetOnCalendarOpen'] = 'Esconde o Widget quando abrir o Calendário';\r
 localizedText['settings.info.hideWidgetOnCalendarOpen'] = 'ative isto se se o widget em tela cheia deverá ficar escondido após clicado para abrir a aplicação de calendário';\r
 localizedText['settings.name.cssStyle_background'] = '.background';\r
index 8f6b9bce2965374b13f61bafef945094091e56d6..238bfc99a138c3debb39f28f23e89e1eb6c83daf 100644 (file)
@@ -65,8 +65,10 @@ localizedText['settings.info.showNothingText'] = 'показывает текс
 localizedText['settings.name.nothingText'] = 'Текст "Нет будущих событий..."';\r
 localizedText['settings.info.nothingText'] = 'показывает текст когда нет записей в календаре';\r
 localizedText['settings.default.nothingText'] = 'Нет будущих событий в %d месяце';\r
-localizedText['settings.name.enableDaylightSaving'] = 'Включить летнее время (+1ч)';\r
-localizedText['settings.info.enableDaylightSaving'] = 'задает летнее время (+1ч), иначе зимнее время';\r
+localizedText['settings.name.enableDaylightSaving'] = 'Включить летнее время';\r
+localizedText['settings.info.enableDaylightSaving'] = 'задает летнее время, иначе зимнее время';\r
+localizedText['settings.name.daylightSavingOffset'] = 'Daylight Saving Offset (hours)';\r
+localizedText['settings.info.daylightSavingOffset'] = 'Number of hours your clock is shifted by daylight saving time. This setting is only relevant if daylight saving has been enabled. The default offset in europe is 1 hour.';\r
 localizedText['settings.name.hideWidgetOnCalendarOpen'] = 'Скрывать виджет когда запущен календарь';\r
 localizedText['settings.info.hideWidgetOnCalendarOpen'] = 'виджет будет скрыт при запуске календаря, иначе выводиться всегда';\r
 localizedText['settings.name.cssStyle_background'] = '.background';\r