]> code.delx.au - comingnext/blobdiff - comingNext/index.html
added persitent settings feature
[comingnext] / comingNext / index.html
index 05498ab065bc83625603f2955da0b86cf54c104c..5321d5a386d16a0306f26bf942839abd38d743d2 100644 (file)
@@ -76,6 +76,10 @@ var orientation = '';
 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
@@ -277,9 +281,23 @@ function requestNotification()
        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
@@ -287,9 +305,16 @@ function requestNotification()
 \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
@@ -713,7 +738,6 @@ function init()
        }\r
 \r
        loadSettings();\r
-       updateCssClasses();\r
        collectLocales();\r
        //updateData();\r
        requestNotification();\r
@@ -829,6 +853,53 @@ function updateCssClasses()
        }\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
@@ -837,38 +908,85 @@ function restoreDefaultSettings()
 \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