]> code.delx.au - comingnext/commitdiff
fixed weekday extraction from dates
authorMichael Prager <michael@pragers.de>
Fri, 19 Aug 2011 19:17:24 +0000 (21:17 +0200)
committerMichael Prager <michael@pragers.de>
Fri, 19 Aug 2011 19:17:24 +0000 (21:17 +0200)
Nokia's latest Anna firmware broke the Date.toLocaleDateString() method
which no longer returns the localized weekday but a simple "19/08/11"
instead.

The now implemented workaround collects all weekday locales the same way
the month locales are collected: for every weekday, a temporary calendar
entry is created and its resulting startdate fetched back into the app.
This is slow but hopefully will survive further API changes.

Readme.txt
comingNext/index.html

index c4f434ad40793c4c5369a9526d559b90ff288f0b..ea714211de5189cda95814262aedf2df8f2615ec 100644 (file)
@@ -277,6 +277,7 @@ Changelog:
     generate debug logs\r
 1.33 () by Michael Prager\r
   - added support for X7-00, E6-00, T7-00, 500 and other "Anna" devices\r
+  - added weekday fix for Symbian^3 devices which got an "Anna" firmware update\r
   - improved error handling: don't break widget when a system backup is made\r
   - updated included "Skin Fetcher" tool to version 1.5 (which now properly \r
     supports N8-00, E7-00, C6-00, C6-01, C7-00, C7 Astound, X7-00, T7-00 and 500)\r
index 518c31d5331c6053932d55d13c9dcd24e0a862f8..14da1c3a5a6d9af9372e55620534618d5be3acde 100644 (file)
@@ -88,6 +88,7 @@ var versionURL = "http://comingnext.sourceforge.net/version.xml";
 var calendarService = null;\r
 var cacheEntriesHtml = [];\r
 var months_translated = [];\r
+var weekdays_translated = [];\r
 var orientation = '';\r
 var now = new Date();\r
 var mode = 0; // 0 = homescreen, 1 = fullscreen, 2 = settings, 3 = about, 4 = check for update\r
@@ -246,6 +247,26 @@ function collectLocales()
                        error("collectLocales: " + e + ', line ' + e.line);\r
                }\r
        }\r
+       for (weekday = 0; weekday < 7; weekday++) {\r
+               var startDate = new Date(2000, 0, 2 + weekday); // date that we know for sure is a sunday\r
+\r
+               var item = new Object();\r
+               item.Type = "DayEvent";\r
+               item.StartTime = startDate;\r
+               item.Summary = "__weekday_temp" + weekday;\r
+\r
+               var criteria = new Object();\r
+               criteria.Type = "CalendarEntry";\r
+               criteria.Item = item;\r
+\r
+               try {\r
+                       var result = calendarService.IDataSource.Add(criteria);\r
+                       if (result.ErrorCode)\r
+                               throw(result.ErrorMessage);\r
+               } catch (e) {\r
+                       error("collectLocales: " + e + ', line ' + e.line);\r
+               }\r
+       }\r
        try {\r
                var startTime = new Date(tmpyear,0,1);\r
                var endTime = new Date(tmpyear,11,31);\r
@@ -298,6 +319,42 @@ function collectLocales()
                error("collectLocales: " + e + ', line ' + e.line);\r
                return;\r
        }\r
+       try {\r
+               var startTime = new Date(2000,0,2);\r
+               var endTime = new Date(2000,0,9);\r
+               var listFiltering = {\r
+                       Type:'CalendarEntry', \r
+                       Filter:{\r
+                               StartRange: startTime,\r
+                               EndRange: endTime,\r
+                               SearchText: '__weekday_temp',\r
+                               Type: 'DayEvent'\r
+                       }\r
+               }\r
+               var result = calendarService.IDataSource.GetList(listFiltering);\r
+               if (result.ErrorCode)\r
+                       throw(result.ErrorMessage);\r
+               var weekdaylist = result.ReturnValue;\r
+       } catch(e) {\r
+               error("collectLocales: " + e + ', line ' + e.line);\r
+               return;\r
+       }\r
+       try {\r
+               var entry;\r
+               var counter2 = 0;\r
+               var curWeekday = "";\r
+\r
+               while (weekdaylist && (entry = weekdaylist.getNext()) != undefined) {\r
+                       curWeekday = (entry.StartTime + '').split(',')[0];\r
+                       log(entry.StartTime + ' -> ' + curWeekday + ' ' + counter2);\r
+                       ids[counter + counter2] = entry.id;\r
+                       weekdays_translated[counter2] = curWeekday;\r
+                       counter2++;\r
+               }\r
+       } catch(e) {\r
+               error("collectLocales: " + e + ', line ' + e.line);\r
+               return;\r
+       }\r
        log(ids);\r
        try {\r
                var criteria = new Object();\r
@@ -457,6 +514,14 @@ function parseDate(dateString)
        return result;\r
 }\r
 \r
+function getWeekdayLocalized(date) {\r
+       var localizedString = date.toLocaleDateString();\r
+       if (localizedString.match(/\d\d\/\d\d\/\d\d/)) {\r
+               return weekdays_translated[date.getDay()];\r
+       } else\r
+               return localizedString.split(',')[0];\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
 function formatDate(date, format)\r
 {\r
@@ -787,7 +852,9 @@ function updateData()
                                        // some languages have very strange locale date formats, can't parse all those. Also some todos don't have dates at all.\r
                                        entriesHtml += '<td colspan="4"><span class="date">' + entryDate + '</span> ';\r
                                } else {\r
-                                       var weekDay = date.toLocaleDateString().substr(0,config['weekDayLength'].Value);\r
+                                       var weekDay = getWeekdayLocalized(date).substr(0,config['weekDayLength'].Value);\r
+                                       log('date.toLocaleDateString(): ' + date.toLocaleDateString());\r
+                                       log('weekDay: ' + weekDay);\r
                                        var time = formatTime(date);\r
                                        var dateStr = formatDate(date, entryDate);\r
                                        if (entry.Type == 'ToDo' && overdue && config['markOverdueTodos'].Value) {\r