+++ /dev/null
-<html>\r
-<head>\r
- <title>The source code</title>\r
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
-</head>\r
-<body onload="prettyPrint();">\r
- <pre class="prettyprint lang-js">tx.Importer = function(){\r
- function chooseFile(callback){\r
- var file = new air.File(air.File.documentsDirectory.nativePath);\r
- var filter = new air.FileFilter("Tasks XML File", "*.xml");\r
- \r
- file.addEventListener('select', function(e){\r
- doImport(e.target, callback);\r
- });\r
- \r
- file.browseForOpen('Open', [filter]);\r
- }\r
- \r
- \r
- /*\r
- * This import function used to be clean and simple. The addition of asynchronous import and\r
- * a progress bar changed that quickly. :) \r
- */\r
- function doImport(file, callback){\r
- \r
- Ext.Msg.progress('Import', 'Reading file...');\r
- \r
- var listTable = tx.data.conn.getTable('list', 'listId');\r
- var taskTable = tx.data.conn.getTable('task', 'taskId');\r
- var taskCount = 0;\r
- var visibleIndex = 0;\r
- var doUpdate = true;\r
- var f = String.format;\r
- \r
- function getProgress(index){\r
- if(taskCount > 0){\r
- return (.8 * index) / taskCount;\r
- }else{\r
- return .8;\r
- }\r
- }\r
- \r
- function readFile(){\r
- var stream = new air.FileStream();\r
- stream.open(file, air.FileMode.READ);\r
- var xml = stream.readUTFBytes(stream.bytesAvailable);\r
- stream.close();\r
- \r
- Ext.Msg.updateProgress(.1, 'Parsing...');\r
- parse.defer(10, null, [xml]);\r
- }\r
- \r
- function parse(xml){\r
- try {\r
- var doc = new runtime.flash.xml.XMLDocument();\r
- doc.ignoreWhite = true;\r
- doc.parseXML(xml);\r
- \r
- var lists = doc.firstChild.childNodes;\r
- var count = lists.length;\r
- \r
- for (var i = 0; i < count; i++) {\r
- taskCount += lists[i].childNodes.length;\r
- } \r
- Ext.Msg.updateProgress(.15, '', 'Loading Tasks...');\r
- loadLists(lists, 0);\r
- }catch(e){\r
- air.trace(e);\r
- alert('An error occured while trying to import the selected file.');\r
- } \r
- }\r
- \r
- function loadLists(lists, index){\r
- if(index < lists.length){\r
- var list = lists[index];\r
- listTable.save(list.attributes);\r
- nextTask(list.childNodes, 0, lists, index);\r
- }\r
- else {\r
- Ext.Msg.updateProgress(1, '', 'Completing import...');\r
- callback.defer(10);\r
- } \r
- } \r
- \r
- function nextTask(tasks, index, lists, listIndex){\r
- if(index < tasks.length){\r
- Ext.Msg.updateProgress(\r
- getProgress(++visibleIndex),\r
- f('{0} of {1}', visibleIndex, taskCount)\r
- );\r
- loadTasks.defer(250, window, [tasks, index, lists, listIndex]);\r
- }\r
- else {\r
- loadLists(lists, ++listIndex);\r
- }\r
- }\r
- \r
- function loadTasks(tasks, index, lists, listIndex){\r
- taskTable.save(tasks[index].attributes);\r
- nextTask(tasks, ++index, lists, listIndex);\r
- }\r
- \r
- readFile.defer(10);\r
- }\r
- \r
- this.doImport = function(callback){\r
- chooseFile(callback);\r
- }\r
-};\r
-</pre> \r
-</body>\r
-</html>
\ No newline at end of file