fontsize: { Type: 'Enum', Default: 'auto', Value: 'auto', ValidValues: ['auto', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28'],},\r
eventsPerWidget: { Type: 'Int', Default: 4, Value: 4,},\r
monthRange: { Type: 'Int', Default: 2, Value: 2,},\r
+ maxNumberOfEventsOnFullscreen: { Type: 'Int', Default: 30, Value: 30,},\r
includeTodos: { Type: 'Bool', Default: true, Value: true,},\r
useBackgroundImage: { Type: 'Bool', Default: true, Value: true,},\r
backgroundImageLocation: { Type: 'Enum', Default: 'internal', Value: 'internal', ValidValues: ['internal', 'external']},\r
showCalendarIndicator: { Type: 'Bool', Default: true, Value: true,},\r
excludedCalendars: { Type: 'Array', Default: [], Value: [],},\r
enableLogging: { Type: 'Bool', Default: false, Value: false,},\r
+ anonymizeLogging: { 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
cssStyle_weekDay: { Type: 'String', Default: '', Value: '',},\r
//-------------------------------------------------------\r
// Nothing of interest from here on...\r
//-------------------------------------------------------\r
+\r
+function fixDate(d) {\r
+ if (d.getTimezoneOffset() < -12*60) {\r
+ d = new Date((new Date(d.getTime()-24*3600*1000)).toLocaleString());\r
+ }\r
+ return d\r
+}\r
+\r
+function newDate() {\r
+ return fixDate(new Date());\r
+}\r
+\r
var panelNum = 0; // use 1 for second panel\r
var version = "1.37";\r
var versionURL = "http://comingnext.sourceforge.net/version.xml";\r
var months_translated = [];\r
var weekdays_translated = [];\r
var orientation = '';\r
-var now = new Date();\r
+var now = newDate();\r
var mode = 0; // 0 = homescreen, 1 = fullscreen, 2 = settings, 3 = about, 4 = check for update\r
var reqV = null; \r
var settingsCalEntryId = null;\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
+ var startDate = new Date(2000, 0, 2 + weekday, 12); // date that we know for sure is a sunday\r
\r
var item = new Object();\r
item.Type = "DayEvent";\r
lastReloadTime = null; // force calendar data reload on this update\r
}\r
\r
- now = new Date();\r
+ now = newDate();\r
\r
// only reload calendar data every 6 hours, visual updates occure more often\r
if (!lastReloadTime || now.getTime() - lastReloadTime.getTime() > reloadInterval) {\r
} else {\r
entryLists = [meetingList];\r
}\r
- lastReloadTime = new Date();\r
+ lastReloadTime = newDate();\r
} catch(e) {\r
error('loading Calendar items list:' + e + ', line ' + e.line);\r
return;\r
if (mode == 0) {\r
if (config['fontsize'].Value == config['fontsize'].ValidValues[0]) {\r
fontsize = parseInt(72 / config['eventsPerWidget'].Value) + 'px';\r
- lineheight = parseInt(82 / config['eventsPerWidget'].Value) + 'px';\r
+ lineheight = parseInt(72 / config['eventsPerWidget'].Value) + 'px';\r
}\r
}\r
if (config['fontsize'].Value != config['fontsize'].ValidValues[0]) {\r
fontsize = config['fontsize'].Value + 'px';\r
lineheight = fontsize;\r
}\r
- changeCssClass('.icon', config['cssStyle_icon'].Value + '; width:' + lineheight + '; height:' + lineheight + ';');\r
+ changeCssClass('.icon', config['cssStyle_icon'].Value + '; width:' + fontsize + '; height:' + fontsize + ';');\r
var entriesHtml = '<table style="font-size:' + fontsize + '; line-height:' + lineheight + ';">';\r
if (mode == 0)\r
entriesHtml = '<table width="307" height="82"><tr><td>' + entriesHtml; // this is needed to center the actual content vertically\r
if (mode == 0)\r
max = (panelNum + 1) * config['eventsPerWidget'].Value;\r
else\r
- max = 30; // we can display a lot more events in fullscreen mode\r
+ max = config["maxNumberOfEventsOnFullscreen"].Value; // we can display a lot more events in fullscreen mode\r
\r
if (config['enableLogging'].Value) {\r
var listinfo = "";\r
cacheEntriesHtml = entriesHtml;\r
}\r
\r
- lastUpdateTime = new Date();\r
+ lastUpdateTime = newDate();\r
} catch(e) {\r
error('displaying list:' + e + ', line ' + e.line);\r
return;\r
{\r
updateScreen();\r
\r
- var time = new Date();\r
+ var time = newDate();\r
if (time.getTime() - lastUpdateTime.getTime() > config['updateDataInterval'].Value * 60 * 1000) {\r
log('updateScreen(): force updateData() because last update was too long ago (' + (time.getTime() - lastUpdateTime.getTime()) / 1000 + 's)');\r
clearUpdateTimer();\r
if (!itemCopy['CalendarName']) {\r
itemCopy['CalendarName'] = calendarName;\r
}\r
+ if (config['anonymizeLogging'].Value && config['enableLogging'].Value) {\r
+ if (itemCopy['Summary'])\r
+ itemCopy['Summary'] = getHashForString(itemCopy['Summary']);\r
+ if (itemCopy['Location'])\r
+ itemCopy['Location'] = getHashForString(itemCopy['Location']);\r
+ }\r
array.push(itemCopy);\r
txt += array[array.length - 1].Summary + ", ";\r
}\r
return defaultFontSize;\r
}\r
\r
+function getHashForString(string)\r
+{\r
+ // cheap hashing, loosly based on Java's String.hashCode()\r
+ for (var hash = 0, i = 0; i < string.length; i++)\r
+ hash = (hash << 5) - hash + string.charCodeAt(i);\r
+ hash = hash & hash; // Convert to 32bit integer\r
+ if (hash < 0)\r
+ hash = -hash;\r
+ return hash.toString(16).toUpperCase();\r
+}\r
+\r
</script>\r
\r
<style type="text/css">\r