X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/docs/source/Importer.html?ds=sidebyside diff --git a/docs/source/Importer.html b/docs/source/Importer.html new file mode 100644 index 00000000..30e587d3 --- /dev/null +++ b/docs/source/Importer.html @@ -0,0 +1,113 @@ + +
+tx.Importer = function(){ + function chooseFile(callback){ + var file = new air.File(air.File.documentsDirectory.nativePath); + var filter = new air.FileFilter("Tasks XML File", "*.xml"); + + file.addEventListener('select', function(e){ + doImport(e.target, callback); + }); + + file.browseForOpen('Open', [filter]); + } + + + /* + * This import function used to be clean and simple. The addition of asynchronous import and + * a progress bar changed that quickly. :) + */ + function doImport(file, callback){ + + Ext.Msg.progress('Import', 'Reading file...'); + + var listTable = tx.data.conn.getTable('list', 'listId'); + var taskTable = tx.data.conn.getTable('task', 'taskId'); + var taskCount = 0; + var visibleIndex = 0; + var doUpdate = true; + var f = String.format; + + function getProgress(index){ + if(taskCount > 0){ + return (.8 * index) / taskCount; + }else{ + return .8; + } + } + + function readFile(){ + var stream = new air.FileStream(); + stream.open(file, air.FileMode.READ); + var xml = stream.readUTFBytes(stream.bytesAvailable); + stream.close(); + + Ext.Msg.updateProgress(.1, 'Parsing...'); + parse.defer(10, null, [xml]); + } + + function parse(xml){ + try { + var doc = new runtime.flash.xml.XMLDocument(); + doc.ignoreWhite = true; + doc.parseXML(xml); + + var lists = doc.firstChild.childNodes; + var count = lists.length; + + for (var i = 0; i < count; i++) { + taskCount += lists[i].childNodes.length; + } + Ext.Msg.updateProgress(.15, '', 'Loading Tasks...'); + loadLists(lists, 0); + }catch(e){ + air.trace(e); + alert('An error occured while trying to import the selected file.'); + } + } + + function loadLists(lists, index){ + if(index < lists.length){ + var list = lists[index]; + listTable.save(list.attributes); + nextTask(list.childNodes, 0, lists, index); + } + else { + Ext.Msg.updateProgress(1, '', 'Completing import...'); + callback.defer(10); + } + } + + function nextTask(tasks, index, lists, listIndex){ + if(index < tasks.length){ + Ext.Msg.updateProgress( + getProgress(++visibleIndex), + f('{0} of {1}', visibleIndex, taskCount) + ); + loadTasks.defer(250, window, [tasks, index, lists, listIndex]); + } + else { + loadLists(lists, ++listIndex); + } + } + + function loadTasks(tasks, index, lists, listIndex){ + taskTable.save(tasks[index].attributes); + nextTask(tasks, ++index, lists, listIndex); + } + + readFile.defer(10); + } + + this.doImport = function(callback){ + chooseFile(callback); + } +}; ++ + \ No newline at end of file