From 425ada1748988af6de379edb00cca52c2a4eadf2 Mon Sep 17 00:00:00 2001 From: Michael Prager Date: Fri, 19 Aug 2011 21:17:24 +0200 Subject: [PATCH] fixed weekday extraction from dates 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 | 1 + comingNext/index.html | 69 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/Readme.txt b/Readme.txt index c4f434a..ea71421 100644 --- a/Readme.txt +++ b/Readme.txt @@ -277,6 +277,7 @@ Changelog: generate debug logs 1.33 () by Michael Prager - added support for X7-00, E6-00, T7-00, 500 and other "Anna" devices + - added weekday fix for Symbian^3 devices which got an "Anna" firmware update - improved error handling: don't break widget when a system backup is made - updated included "Skin Fetcher" tool to version 1.5 (which now properly supports N8-00, E7-00, C6-00, C6-01, C7-00, C7 Astound, X7-00, T7-00 and 500) diff --git a/comingNext/index.html b/comingNext/index.html index 518c31d..14da1c3 100644 --- a/comingNext/index.html +++ b/comingNext/index.html @@ -88,6 +88,7 @@ var versionURL = "http://comingnext.sourceforge.net/version.xml"; var calendarService = null; var cacheEntriesHtml = []; var months_translated = []; +var weekdays_translated = []; var orientation = ''; var now = new Date(); var mode = 0; // 0 = homescreen, 1 = fullscreen, 2 = settings, 3 = about, 4 = check for update @@ -246,6 +247,26 @@ function collectLocales() error("collectLocales: " + e + ', line ' + e.line); } } + for (weekday = 0; weekday < 7; weekday++) { + var startDate = new Date(2000, 0, 2 + weekday); // date that we know for sure is a sunday + + var item = new Object(); + item.Type = "DayEvent"; + item.StartTime = startDate; + item.Summary = "__weekday_temp" + weekday; + + var criteria = new Object(); + criteria.Type = "CalendarEntry"; + criteria.Item = item; + + try { + var result = calendarService.IDataSource.Add(criteria); + if (result.ErrorCode) + throw(result.ErrorMessage); + } catch (e) { + error("collectLocales: " + e + ', line ' + e.line); + } + } try { var startTime = new Date(tmpyear,0,1); var endTime = new Date(tmpyear,11,31); @@ -298,6 +319,42 @@ function collectLocales() error("collectLocales: " + e + ', line ' + e.line); return; } + try { + var startTime = new Date(2000,0,2); + var endTime = new Date(2000,0,9); + var listFiltering = { + Type:'CalendarEntry', + Filter:{ + StartRange: startTime, + EndRange: endTime, + SearchText: '__weekday_temp', + Type: 'DayEvent' + } + } + var result = calendarService.IDataSource.GetList(listFiltering); + if (result.ErrorCode) + throw(result.ErrorMessage); + var weekdaylist = result.ReturnValue; + } catch(e) { + error("collectLocales: " + e + ', line ' + e.line); + return; + } + try { + var entry; + var counter2 = 0; + var curWeekday = ""; + + while (weekdaylist && (entry = weekdaylist.getNext()) != undefined) { + curWeekday = (entry.StartTime + '').split(',')[0]; + log(entry.StartTime + ' -> ' + curWeekday + ' ' + counter2); + ids[counter + counter2] = entry.id; + weekdays_translated[counter2] = curWeekday; + counter2++; + } + } catch(e) { + error("collectLocales: " + e + ', line ' + e.line); + return; + } log(ids); try { var criteria = new Object(); @@ -457,6 +514,14 @@ function parseDate(dateString) return result; } +function getWeekdayLocalized(date) { + var localizedString = date.toLocaleDateString(); + if (localizedString.match(/\d\d\/\d\d\/\d\d/)) { + return weekdays_translated[date.getDay()]; + } else + return localizedString.split(',')[0]; +} + // 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" function formatDate(date, format) { @@ -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. entriesHtml += '' + entryDate + ' '; } else { - var weekDay = date.toLocaleDateString().substr(0,config['weekDayLength'].Value); + var weekDay = getWeekdayLocalized(date).substr(0,config['weekDayLength'].Value); + log('date.toLocaleDateString(): ' + date.toLocaleDateString()); + log('weekDay: ' + weekDay); var time = formatTime(date); var dateStr = formatDate(date, entryDate); if (entry.Type == 'ToDo' && overdue && config['markOverdueTodos'].Value) { -- 2.39.2