netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); function RunTest() { //C3 //var testdi = "C:\\CookBook\\TermsDictionaryGlossary\\ZZAccented\\à blanc.txt"; //dump(testdi); var cbiDir = getLocalFileObj('c:\\cbtemp'); //fails in init path if using the other forward slash if (!cbiDir) { gjonxulerror("Cannot get localFileObj for ", getCBdir() ); return; } if (!cbiDir.exists()) { try { cbiDir.create(1, 0755); } catch (err) { gjonxulerror("Cannot create Main Dir" ,err); return; } } var fileToUnzip = ''; while(!(fileToUnzip = doTstFilePicker('j'))); // nsILocalFile extends nsIFile var ifile = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); ifile.initWithPath(fileToUnzip); var zipread = getZipReaderForFile(ifile); // create directories first var entries = zipread.findEntries("*/"); var entryName = ''; while (entries.hasMore()) { entryName = entries.getNext(); var opDir = createiFileDir(cbiDir, entryName); if (!opDir) { gjonxulerror("Directory Create Cannot get localfilobj for ", entryName); return; } if (!opDir.exists()) { try { opDir.create(1, 0755); } catch (err) { gjonxulerror("Cannot create Dir = " + opDir.path ,err); return; } } } var numfiles = 0; entries = zipread.findEntries(null); while (entries.hasMore()) { var entryName = entries.getNext(); var opFile = createiFileDir(cbiDir, entryName); if (!opFile) { gjonxulerror("File Create Cannot get localfilobj for ", entryName); return; } if (!opFile.exists()) { try { opFile.create(0, 0644); //it says deletes it in the CPP zipread.extract(entryName, opFile); addIt('tb2','File extracted ' + opFile.path ); } catch (err) { gjonxulerror("File extract error = " + opFile.path ,err); } } else { addIt('tb2', 'File Exists ' + opFile.path); } } //while zipread.close(); return; } // display errors and warnings on the page instead of alert boxes function addIt(where, what) { var eol = ''; // get the current value and add something to it if(where =='tb1') { var tmp; tmp = document.getElementById(where).value tmp += what; document.getElementById(where).value = tmp; } else { println(what + '\n'); } } /** * Gets a zip reader for the file specified. * @param zipFile * A ZIP archive to open with a nsIZipReader. * @return A nsIZipReader for the file specified. */ function getZipReaderForFile(zipFile) { try { var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] .createInstance(Components.interfaces.nsIZipReader); zipReader.open(zipFile); } catch (e) { zipReader.close(); throw e; } return zipReader; } function doTstFilePicker(where) { var lf = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); var msg = "Please SELECT a file to unzip "; fp.init(window, msg, nsIFilePicker.modeOpen); var res = fp.show(); if (res == nsIFilePicker.returnOK) { var thefile = fp.file.path; //println("the file " + thefile + '\n'); } else { alert( "-- Error --", "Please select a file\n"); println('doFilePicker - Invalid doFilePicker returning false'); return false; } if(( thefile.length == 0)) { //I should not let them exit println('Invalid file returning false'); return false; } return thefile; } function createiFileDir(iFileParent, filePath) { var cbopFile = iFileParent.clone(); var parts = filePath.split("/"); for (var i = 0; i < parts.length; ++i) { cbopFile.append(parts[i]); } return cbopFile; } //if the file does not exist, this fails, windows likes \\ not the other slash function getLocalFileObj(pathin) { try { var thefile = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); thefile.initWithPath(pathin); return thefile } catch (err) { gjonxulerror("error Failure in getLocalFileObj for " + pathin, err); return false; } } function gjonxulerror( theTitle, theText) { var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]; promptService = promptService.getService(Components.interfaces.nsIPromptService); var wintxt = "\n" + " - - - " + "\n" + "\n" + " " + " - - - XUL " + theText + " - - - " + "\n" + " " + " - - - "; promptService.alert(null, theTitle, wintxt); println(theTitle + " " + wintxt + "\n"); } function println(s) { dump(s+"\n "); }