Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / Importer.html
diff --git a/docs/source/Importer.html b/docs/source/Importer.html
new file mode 100644 (file)
index 0000000..30e587d
--- /dev/null
@@ -0,0 +1,113 @@
+<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