var now = new Date();\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
+var settingsCache = null;\r
+var notificationRequest1;\r
+var notificationRequest2;\r
\r
// vars for daylight saving time\r
var daylightsavingWinter = 0;\r
criteria.Type = "CalendarEntry";\r
\r
try {\r
- var result = calendarService.IDataSource.RequestNotification(criteria, callback);\r
- if (result.ErrorCode)\r
- error('loading Calendar items list');\r
+ notificationRequest1 = calendarService.IDataSource.RequestNotification(criteria, callback);\r
+ if (notificationRequest1.ErrorCode)\r
+ error('requestNotification failed with error code ' + notificationRequest1.ErrorCode);\r
+ } catch (e) {\r
+ error("requestNotification: " + e + ', line ' + e.line);\r
+ }\r
+\r
+ var criteria2 = new Object();\r
+ criteria2.Type = "CalendarEntry";\r
+ criteria2.Filter = new Object();\r
+ criteria2.Filter.LocalIdList = new Array();\r
+ criteria2.Filter.LocalIdList[0] = settingsCalEntryId;\r
+\r
+ try {\r
+ notificationRequest2 = calendarService.IDataSource.RequestNotification(criteria2, settingsCallback);\r
+ if (notificationRequest2.ErrorCode)\r
+ error('requestNotification failed with error code ' + notificationRequest2.ErrorCode);\r
} catch (e) {\r
error("requestNotification: " + e + ', line ' + e.line);\r
}\r
\r
function callback(transId, eventCode, result)\r
{\r
+ console.info("callback(): panelNum: %d transId: %d eventCode: %d result.ErrorCode: %d", panelNum, transId, eventCode, result.ErrorCode);\r
updateData();\r
}\r
\r
+function settingsCallback(transId, eventCode, result)\r
+{\r
+ console.info("settingsCallback(): panelNum: %d transId: %d eventCode: %d result.ErrorCode: %d", panelNum, transId, eventCode, result.ErrorCode);\r
+ loadSettings();\r
+}\r
+\r
function parseDate(dateString)\r
{\r
/*\r
}\r
\r
loadSettings();\r
- updateCssClasses();\r
collectLocales();\r
//updateData();\r
requestNotification();\r
}\r
}\r
\r
+function getSettingsCalEntryId()\r
+{\r
+ if (settingsCalEntryId == null) {\r
+ // check if entry already exists\r
+ var listFiltering = {\r
+ Type:'CalendarEntry', \r
+ Filter:{\r
+ StartRange: new Date(2000, 0, 1),\r
+ EndRange: new Date(2000, 0, 1),\r
+ SearchText: 'ComingNext Settings|',\r
+ Type: 'DayEvent'\r
+ }\r
+ }\r
+ var result = calendarService.IDataSource.GetList(listFiltering);\r
+ if (result.ErrorCode) {\r
+ error(result.ErrorMessage);\r
+ return;\r
+ }\r
+ var list = result.ReturnValue;\r
+ var entry = list.getNext();\r
+ if (entry != undefined) {\r
+ settingsCalEntryId = entry.LocalId;\r
+ console.info("settingsCalEntryId=" + settingsCalEntryId);\r
+ }\r
+ else { // create settings item\r
+ var item = new Object();\r
+ item.Type = "DayEvent";\r
+ item.StartTime = new Date(2000, 0, 1);\r
+ item.Summary = "ComingNext Settings|";\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
+ error(result.ErrorMessage);\r
+ } catch (e) {\r
+ error("getSettingsCalEntryId: " + e + ', line ' + e.line);\r
+ }\r
+\r
+ getSettingsCalEntryId();\r
+ }\r
+ }\r
+}\r
+\r
function restoreDefaultSettings()\r
{\r
for (var key in config)\r
\r
function loadSettings()\r
{\r
- for (var key in config) {\r
- if (widget.preferenceForKey(key)) {\r
- if (config[key].Type == 'Int')\r
- config[key].Value = Number(widget.preferenceForKey(key));\r
- else if (config[key].Type == 'String')\r
- config[key].Value = widget.preferenceForKey(key);\r
- else if (config[key].Type == 'Bool')\r
- config[key].Value = (widget.preferenceForKey(key) == 'true')\r
- else if (config[key].Type == 'Enum')\r
- config[key].Value = widget.preferenceForKey(key);\r
- else if (config[key].Type == 'UID')\r
- config[key].Value = Number(widget.preferenceForKey(key));\r
+ getSettingsCalEntryId();\r
+ var listFiltering = {\r
+ Type:'CalendarEntry', \r
+ Filter:{\r
+ LocalId: settingsCalEntryId\r
}\r
- else\r
- config[key].Value = config[key].Default;\r
- console.info('Settings: ' + key + '=\'' + config[key].Value + '\'');\r
+ }\r
+ var result = calendarService.IDataSource.GetList(listFiltering);\r
+ if (result.ErrorCode) {\r
+ error(result.ErrorMessage);\r
+ return;\r
+ }\r
+ var entry = result.ReturnValue.getNext();\r
+ if (entry != undefined) {\r
+ // only reload settings if they chanced since the last reload\r
+ if (settingsCache != entry.Summary)\r
+ {\r
+ restoreDefaultSettings();\r
+ var stringlist = entry.Summary.split("|");\r
+ // skip the first two entries, those contain header and version info\r
+ for(var i = 2; i < stringlist.length - 1; i++) {\r
+ var pair = stringlist[i].split('=');\r
+ var key = pair[0];\r
+ var value = pair[1];\r
+ console.info('stringlist: ' + key + '=\'' + value + '\'');\r
+ if (config[key].Type == 'Int')\r
+ config[key].Value = Number(value);\r
+ else if (config[key].Type == 'String')\r
+ config[key].Value = value;\r
+ else if (config[key].Type == 'Bool')\r
+ config[key].Value = (value == 'true')\r
+ else if (config[key].Type == 'Enum')\r
+ config[key].Value = value;\r
+ else if (config[key].Type == 'UID')\r
+ config[key].Value = Number(value);\r
+ }\r
+ settingsCache = entry.Summary;\r
+ updateCssClasses();\r
+ }\r
+ }\r
+ else {\r
+ error("Failed to load settings, calendar entry could not be found");\r
}\r
}\r
\r
function saveSettings()\r
{\r
+ getSettingsCalEntryId();\r
+ var item = new Object();\r
+ item.Type = "DayEvent";\r
+ item.StartTime = new Date(2000, 0, 1);\r
+ item.LocalId = settingsCalEntryId;\r
+ item.Summary = "ComingNext Settings|" + version + "|";\r
+\r
for (var key in config) {\r
if (config[key].Type == 'Int')\r
- widget.setPreferenceForKey(config[key].Value.toString(), key);\r
+ item.Summary += key + "=" + config[key].Value.toString() + "|";\r
else if (config[key].Type == 'String')\r
- widget.setPreferenceForKey(config[key].Value, key);\r
+ item.Summary += key + "=" + config[key].Value + "|";\r
else if (config[key].Type == 'Bool')\r
- widget.setPreferenceForKey(config[key].Value ? 'true' : 'false', key);\r
+ item.Summary += key + "=" + (config[key].Value ? 'true' : 'false') + "|";\r
else if (config[key].Type == 'Enum')\r
- widget.setPreferenceForKey(config[key].Value, key);\r
+ item.Summary += key + "=" + config[key].Value + "|";\r
else if (config[key].Type == 'UID')\r
- widget.setPreferenceForKey(config[key].Value.toString(), key);\r
+ item.Summary += key + "=" + config[key].Value.toString() + "|";\r
+ }\r
+ settingsCache = item.Summary;\r
+ \r
+ var criteria = new Object();\r
+ criteria.Type = "CalendarEntry";\r
+ criteria.Item = item;\r
+\r
+ console.info("Saving settings to calendar entry: " + item.Summary);\r
+ try {\r
+ var result = calendarService.IDataSource.Add(criteria);\r
+ if (result.ErrorCode)\r
+ error(result.ErrorMessage);\r
+ } catch (e) {\r
+ error("saveSettings: " + e + ', line ' + e.line);\r
}\r
}\r
\r