home *** CD-ROM | disk | FTP | other *** search
/ ftp.swcp.com / ftp.swcp.com.zip / ftp.swcp.com / mac / mozilla-mac-0.9.sea.hqx / mozilla-mac-0.9 / Chrome / messenger.jar / content / messenger / importDialog.js < prev    next >
Text File  |  2001-05-05  |  25KB  |  782 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  *
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * The Original Code is mozilla.org code.
  14.  *
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are
  17.  * Copyright (C) 1999 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  *
  20.  * Contributor(s):
  21.  */
  22.  
  23. var importType = null;
  24. var gImportMsgsBundle;
  25. var importService = 0;
  26. var successStr = null;
  27. var errorStr = null;
  28. var progressInfo = null;
  29. var selectedModuleName = null;
  30.  
  31.  
  32. function OnLoadImportDialog()
  33. {
  34.   gImportMsgsBundle = document.getElementById("bundle_importMsgs");
  35.   importService = Components.classes["@mozilla.org/import/import-service;1"].getService();
  36.   importService = top.importService.QueryInterface(Components.interfaces.nsIImportService);
  37.  
  38.   progressInfo = { };
  39.   progressInfo.progressWindow = null;
  40.   progressInfo.importInterface = null;
  41.   progressInfo.mainWindow = window;
  42.   progressInfo.intervalState = 0;
  43.   progressInfo.importSuccess = false;
  44.   progressInfo.importType = null;
  45.  
  46.   // look in arguments[0] for parameters
  47.   if (window.arguments && window.arguments.length >= 1 &&
  48.             "importType" in window.arguments[0] && window.arguments[0].importType)
  49.   {
  50.     // keep parameters in global for later
  51.     importType = window.arguments[0].importType;
  52.     progressInfo.importType = top.importType;
  53.   }
  54.   else
  55.   {
  56.     importType = "addressbook";
  57.     progressInfo.importType = "addressbook";
  58.   }
  59.  
  60.   SetUpImportType();
  61. }
  62.  
  63.  
  64. function SetUpImportType()
  65. {
  66.   // set dialog title
  67.   var typeRadioGroup = document.getElementById("importFields");
  68.   switch (importType)
  69.   {
  70.  
  71.     case "mail":
  72.       typeRadioGroup.selectedItem = document.getElementById("mailRadio");
  73.       break;
  74.     case "addressbook":
  75.       typeRadioGroup.selectedItem = document.getElementById("addressbookRadio");
  76.       break;
  77.     case "settings":
  78.       typeRadioGroup.selectedItem = document.getElementById("settingsRadio");
  79.       break;
  80.   }
  81.  
  82.   ListModules();
  83. }
  84.  
  85.  
  86. function SetDivText(id, text)
  87. {
  88.   var div = document.getElementById(id);
  89.  
  90.   if (div) {
  91.     if (!div.childNodes.length) {
  92.       var textNode = document.createTextNode(text);
  93.       div.appendChild(textNode);
  94.     }
  95.     else if ( div.childNodes.length == 1 ) {
  96.       div.childNodes[0].nodeValue = text;
  97.     }
  98.   }
  99. }
  100.  
  101.  
  102. function ImportDialogOKButton()
  103. {
  104.   var tree = document.getElementById('moduleList');
  105.   var deck = document.getElementById("stateDeck");
  106.   var header = document.getElementById("header");
  107.   var progressMeterEl = document.getElementById("progressMeter");
  108.   var progressStatusEl = document.getElementById("progressStatus");
  109.   var progressTitleEl = document.getElementById("progressTitle");
  110.  
  111.   // better not mess around with navigation at this point
  112.   var nextButton = document.getElementById("forward");
  113.   nextButton.setAttribute("disabled", "true");
  114.   var backButton = document.getElementById("back");
  115.   backButton.setAttribute("disabled", "true");
  116.  
  117.   if ( tree && tree.selectedItems && (tree.selectedItems.length == 1) )
  118.   {
  119.     var importTypeRadioGroup = document.getElementById("importFields");
  120.     importType = importTypeRadioGroup.selectedItem.getAttribute("value");
  121.     var index = tree.selectedItems[0].getAttribute('list-index');
  122.     var module = importService.GetModule(importType, index);
  123.     var name = importService.GetModuleName(importType, index);
  124.     selectedModuleName = name;
  125.     if (module)
  126.     {
  127.       var meterText = "";
  128.       switch(importType)
  129.       {
  130.         case "mail":
  131.           top.successStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  132.           if (top.successStr) {
  133.             top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsWString);
  134.           }
  135.           top.errorStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  136.           if (top.errorStr)
  137.             top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsWString);
  138.  
  139.           if (ImportMail( module, top.successStr, top.errorStr) == true)
  140.           {
  141.             // We think it was a success, either, we need to
  142.             // wait for the import to finish
  143.             // or we are done!
  144.             if (top.progressInfo.importInterface == null) {
  145.               ShowImportResults(true, 'Mail');
  146.               return( true);
  147.             }
  148.             else {
  149.               meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
  150.                                                                [ name ]);
  151.               header.setAttribute("description", meterText);
  152.  
  153.               progressStatusEl.setAttribute("label", "");
  154.               progressTitleEl.setAttribute("label", meterText);
  155.  
  156.               deck.setAttribute("index", "2");
  157.               progressInfo.progressWindow = top.window;
  158.               progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
  159.  
  160.               return( true);
  161.             }
  162.           }
  163.           else
  164.           {
  165.             ShowImportResults(false, 'Mail');
  166.             return( false);
  167.           }
  168.           break;
  169.  
  170.         case "addressbook":
  171.           top.successStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  172.           if (top.successStr)
  173.             top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsWString);
  174.           top.errorStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  175.           if (top.errorStr)
  176.             top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsWString);
  177.  
  178.           if (ImportAddress( module, top.successStr, top.errorStr) == true) {
  179.             // We think it was a success, either, we need to
  180.             // wait for the import to finish
  181.             // or we are done!
  182.             if (top.progressInfo.importInterface == null) {
  183.               ShowImportResults(true, 'Address');
  184.               return( true);
  185.             }
  186.             else {
  187.               meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
  188.                                                                [ name ]);
  189.               header.setAttribute("description", meterText);
  190.  
  191.               progressStatusEl.setAttribute("label", "");
  192.               progressTitleEl.setAttribute("label", meterText);
  193.  
  194.               deck.setAttribute("index", "2");
  195.               progressInfo.progressWindow = top.window;
  196.               progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
  197.  
  198.               return( true);
  199.             }
  200.           }
  201.           else
  202.           {
  203.             ShowImportResults(false, 'Address');
  204.             return( false);
  205.           }
  206.           break;
  207.  
  208.         case "settings":
  209.           var error = new Object();
  210.           error.value = null;
  211.           var newAccount = new Object();
  212.           if (!ImportSettings( module, newAccount, error))
  213.           {
  214.             if (error.value)
  215.               ShowImportResultsRaw(gImportMsgsBundle.getString('ImportSettingsFailed'), null);
  216.             // the user canceled the operation, shoud we dismiss
  217.             // this dialog or not?
  218.             return false;
  219.           }
  220.           else
  221.             ShowImportResultsRaw(gImportMsgsBundle.getFormattedString('ImportSettingsSuccess', [ name ]), null);
  222.           break;
  223.       }
  224.     }
  225.   }
  226.  
  227.   return true;
  228. }
  229.  
  230. function SetStatusText( val)
  231. {
  232.   var progressStatus = document.getElementById("progressStatus");
  233.   progressStatus.setAttribute( "label", val);
  234. }
  235.  
  236. function SetProgress( val)
  237. {
  238.   var progressMeter = document.getElementById("progressMeter");
  239.   progressMeter.setAttribute( "label", val);
  240. }
  241.  
  242. function ContinueImportCallback()
  243. {
  244.   progressInfo.mainWindow.ContinueImport( top.progressInfo);
  245. }
  246.  
  247. function ImportSelectionChanged()
  248. {
  249.   var tree = document.getElementById('moduleList');
  250.   if ( tree && tree.selectedItems && (tree.selectedItems.length == 1) )
  251.   {
  252.     var index = tree.selectedItems[0].getAttribute('list-index');
  253.     SetDivText('description', top.importService.GetModuleDescription(top.importType, index));
  254.   }
  255. }
  256.  
  257. function ListModules() {
  258.   if (top.importService == null)
  259.     return;
  260.  
  261.   var body = document.getElementById( "bucketBody");
  262.   var max = body.childNodes.length - 1;
  263.   while (max >= 0) {
  264.     body.removeChild( body.childNodes[max]);
  265.     max--;
  266.   }
  267.  
  268.   var count = top.importService.GetModuleCount( top.importType);
  269.   for (var i = 0; i < count; i++) {
  270.     AddModuleToList( top.importService.GetModuleName( top.importType, i), i);
  271.   }
  272. }
  273.  
  274. function AddModuleToList(moduleName, index)
  275. {
  276.   var body = document.getElementById("bucketBody");
  277.  
  278.   var item = document.createElement('treeitem');
  279.   var row = document.createElement('treerow');
  280.   var cell = document.createElement('treecell');
  281.   cell.setAttribute('label', moduleName);
  282.   item.setAttribute('list-index', index);
  283.  
  284.   row.appendChild(cell);
  285.   item.appendChild(row);
  286.   body.appendChild(item);
  287. }
  288.  
  289.  
  290. function ContinueImport( info) {
  291.   var isMail = info.importType == 'mail' ? true : false;
  292.   var clear = true;
  293.   var deck;
  294.   var pcnt;
  295.  
  296.   if (info.importInterface) {
  297.     if (!info.importInterface.ContinueImport()) {
  298.       info.importSuccess = false;
  299.       clearInterval( info.intervalState);
  300.       if (info.progressWindow != null) {
  301.         deck = document.getElementById("stateDeck");
  302.         deck.setAttribute("index", "3");
  303.         info.progressWindow = null;
  304.       }
  305.  
  306.       ShowImportResults(false, isMail ? 'Mail' : 'Address');
  307.     }
  308.     else if ((pcnt = info.importInterface.GetProgress()) < 100) {
  309.       clear = false;
  310.       if (info.progressWindow != null) {
  311.         if (pcnt < 5)
  312.           pcnt = 5;
  313.         SetProgress( pcnt);
  314.         if (isMail) {
  315.           var mailName = info.importInterface.GetData( "currentMailbox");
  316.           if (mailName) {
  317.             mailName = mailName.QueryInterface( Components.interfaces.nsISupportsWString);
  318.             if (mailName)
  319.               SetStatusText( mailName.data);
  320.           }
  321.         }
  322.       }
  323.     }
  324.     else {
  325.       dump("*** WARNING! sometimes this shows results too early. \n");
  326.       dump("    something screwy here. this used to work fine.\n");
  327.       clearInterval( info.intervalState);
  328.       info.importSuccess = true;
  329.       if (info.progressWindow) {
  330.         deck = document.getElementById("stateDeck");
  331.         deck.setAttribute("index", "3");
  332.         info.progressWindow = null;
  333.       }
  334.  
  335.       ShowImportResults(true, isMail ? 'Mail' : 'Address');
  336.     }
  337.   }
  338.   if (clear) {
  339.     info.intervalState = null;
  340.     info.importInterface = null;
  341.   }
  342. }
  343.  
  344. function ShowImportResults(good, module)
  345. {
  346.   var modSuccess = 'Import' + module + 'Success';
  347.   var modFailed = 'Import' + module + 'Failed';
  348.   var results, title;
  349.   if (good) {
  350.     title = gImportMsgsBundle.getFormattedString(modSuccess, [ selectedModuleName ? selectedModuleName : '' ]);
  351.     results = successStr.data;
  352.   }
  353.   else if (errorStr.data) {
  354.     title = gImportMsgsBundle.getFormattedString(modFailed, [ selectedModuleName ? selectedModuleName : '' ]);
  355.     results = errorStr.data;
  356.   }
  357.  
  358.   if (results && title)
  359.     ShowImportResultsRaw(title, results)
  360. }
  361.  
  362. function ShowImportResultsRaw(title, results)
  363. {
  364.   SetDivText("status", title);
  365.   var header = document.getElementById("header");
  366.   header.setAttribute("description", title);
  367.   dump("*** results = " + results + "\n");
  368.   attachStrings("results", results);
  369.   var deck = document.getElementById("stateDeck");
  370.   deck.setAttribute("index", "3");
  371.   var nextButton = document.getElementById("forward");
  372.   nextButton.label = nextButton.getAttribute("finishedval");
  373.   nextButton.removeAttribute("disabled");
  374.   var cancelButton = document.getElementById("cancel");
  375.   cancelButton.setAttribute("disabled", "true");
  376. }
  377.  
  378. function attachStrings(aNode, aString)
  379. {
  380.   var attachNode = document.getElementById(aNode);
  381.   if (!aString) {
  382.     attachNode.parentNode.setAttribute("hidden", "true");
  383.     return;
  384.   }
  385.   var strings = aString.split("\n");
  386.   for (var i = 0; i < strings.length; i++) {
  387.     if (strings[i]) {
  388.       var currNode = document.createTextNode(strings[i]);
  389.       attachNode.appendChild(currNode);
  390.       var br = document.createElementNS("http://www.w3.org/1999/xhtml", 'br');
  391.       attachNode.appendChild( br);
  392.     }
  393.   }
  394. }
  395.  
  396. function ShowAddressComplete( good)
  397. {
  398.   var str = null;
  399.   if (good == true) {
  400.     if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
  401.       str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ top.selectedModuleName ]);
  402.     else
  403.       str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ "" ]);
  404.     str += "\n";
  405.     str += "\n" + top.successStr.data;
  406.   }
  407.   else {
  408.     if ((top.errorStr.data != null) && (top.errorStr.data.length > 0)) {
  409.       if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
  410.         str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ top.selectedModuleName ]);
  411.       else
  412.         str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ "" ]);
  413.       str += "\n" + top.errorStr.data;
  414.     }
  415.   }
  416.  
  417.   if (str != null)
  418.     alert( str);
  419. }
  420.  
  421. function CreateNewFileSpecFromPath( inPath)
  422. {
  423.   var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
  424.   if (file != null) {
  425.     file = file.QueryInterface( Components.interfaces.nsIFileSpec);
  426.     if (file != null) {
  427.       file.nativePath = inPath;
  428.     }
  429.   }
  430.  
  431.   return( file);
  432. }
  433.  
  434. /*
  435.   Import Settings from a specific module, returns false if it failed
  436.   and true if successful.  A "local mail" account is returned in newAccount.
  437.   This is only useful in upgrading - import the settings first, then
  438.   import mail into the account returned from ImportSettings, then
  439.   import address books.
  440.   An error string is returned as error.value
  441. */
  442. function ImportSettings( module, newAccount, error) {
  443.   var setIntf = module.GetImportInterface( "settings");
  444.   if (setIntf != null)
  445.     setIntf = setIntf.QueryInterface( Components.interfaces.nsIImportSettings);
  446.   if (setIntf == null) {
  447.     error.value = gImportMsgsBundle.getString('ImportSettingsBadModule');
  448.     return( false);
  449.   }
  450.  
  451.   // determine if we can auto find the settings or if we need to ask the user
  452.   var location = new Object();
  453.   var description = new Object();
  454.   var result = setIntf.AutoLocate( description, location);
  455.   if (result == false) {
  456.     // In this case, we couldn't not find the settings
  457.     if (location.value != null) {
  458.       // Settings were not found, however, they are specified
  459.       // in a file, so ask the user for the settings file.
  460.       var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
  461.       if (filePicker != null) {
  462.         filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
  463.         if (filePicker != null) {
  464.           var file = null;
  465.           try {
  466.             filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectSettings'), Components.interfaces.nsIFilePicker.modeOpen);
  467.             filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  468.             filePicker.show();
  469.             if (filePicker.file && (filePicker.file.path.length > 0))
  470.               file = CreateNewFileSpecFromPath( filePicker.file.path);
  471.             else
  472.               file = null;
  473.           }
  474.           catch(ex) {
  475.             file = null;
  476.             error.value = null;
  477.             return( false);
  478.           }
  479.           if (file != null) {
  480.             setIntf.SetLocation( file);
  481.           }
  482.           else {
  483.             error.value = null;
  484.             return( false);
  485.           }
  486.         }
  487.         else {
  488.           error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
  489.           return( false);
  490.         }
  491.       }
  492.       else {
  493.         error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
  494.         return( false);
  495.       }
  496.     }
  497.     else {
  498.       error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
  499.       return( false);
  500.     }
  501.   }
  502.  
  503.   // interesting, we need to return the account that new
  504.   // mail should be imported into?
  505.   // that's really only useful for "Upgrade"
  506.   result = setIntf.Import( newAccount);
  507.   if (result == false) {
  508.     error.value = gImportMsgsBundle.getString('ImportSettingsFailed');
  509.   }
  510.   return( result);
  511. }
  512.  
  513. function CreateNewFileSpec( inFile)
  514. {
  515.   var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
  516.   if (file != null) {
  517.     file = file.QueryInterface( Components.interfaces.nsIFileSpec);
  518.     if (file != null) {
  519.       file.fromFileSpec( inFile);
  520.     }
  521.   }
  522.  
  523.   return( file);
  524. }
  525.  
  526. function ImportMail( module, success, error) {
  527.   if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
  528.     error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
  529.     return( false);
  530.   }
  531.  
  532.   top.progressInfo.importSuccess = false;
  533.  
  534.   var mailInterface = module.GetImportInterface( "mail");
  535.   if (mailInterface != null)
  536.     mailInterface = mailInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
  537.   if (mailInterface == null) {
  538.     error.data = gImportMsgsBundle.getString('ImportMailBadModule');
  539.     return( false);
  540.   }
  541.  
  542.   var loc = mailInterface.GetData( "mailLocation");
  543.  
  544.   if (loc == null) {
  545.     // No location found, check to see if we can ask the user.
  546.     if (mailInterface.GetStatus( "canUserSetLocation") != 0) {
  547.       var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
  548.       if (filePicker != null) {
  549.         filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
  550.         if (filePicker != null) {
  551.           try {
  552.             filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectMailDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
  553.             filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  554.             filePicker.show();
  555.             if (filePicker.file && (filePicker.file.path.length > 0))
  556.               mailInterface.SetData( "mailLocation", CreateNewFileSpecFromPath( filePicker.file.path));
  557.             else
  558.               return( false);
  559.           } catch( ex) {
  560.             // don't show an error when we return!
  561.             return( false);
  562.           }
  563.         }
  564.         else {
  565.           error.data = gImportMsgsBundle.getString('ImportMailNotFound');
  566.           return( false);
  567.         }
  568.       }
  569.       else {
  570.         error.data = gImportMsgsBundle.getString('ImportMailNotFound');
  571.         return( false);
  572.       }
  573.     }
  574.     else {
  575.       error.data = gImportMsgsBundle.getString('ImportMailNotFound');
  576.       return( false);
  577.     }
  578.   }
  579.  
  580.   if (mailInterface.WantsProgress()) {
  581.     if (mailInterface.BeginImport( success, error)) {
  582.       top.progressInfo.importInterface = mailInterface;
  583.       // top.intervalState = setInterval( "ContinueImport()", 100);
  584.       return true;
  585.     }
  586.     else
  587.       return false;
  588.   }
  589.   else
  590.     return mailInterface.BeginImport( success, error) ? true : false;
  591. }
  592.  
  593.  
  594. // The address import!  A little more complicated than the mail import
  595. // due to field maps...
  596. function ImportAddress( module, success, error) {
  597.   if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
  598.     error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
  599.     return( false);
  600.   }
  601.  
  602.   top.progressInfo.importSuccess = false;
  603.  
  604.   var addInterface = module.GetImportInterface( "addressbook");
  605.   if (addInterface != null)
  606.     addInterface = addInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
  607.   if (addInterface == null) {
  608.     error.data = gImportMsgsBundle.getString('ImportAddressBadModule');
  609.     return( false);
  610.   }
  611.  
  612.  
  613.   var loc = addInterface.GetStatus( "autoFind");
  614.   if (loc == false) {
  615.     loc = addInterface.GetData( "addressLocation");
  616.     if (loc != null) {
  617.       loc = loc.QueryInterface( Components.interfaces.nsIFileSpec);
  618.       if (loc != null) {
  619.         if (!loc.exists)
  620.           loc = null;
  621.       }
  622.     }
  623.   }
  624.  
  625.   if (loc == null) {
  626.     // Couldn't find the address book, see if we can
  627.     // as the user for the location or not?
  628.     if (addInterface.GetStatus( "canUserSetLocation") == 0) {
  629.       // an autofind address book that could not be found!
  630.       error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
  631.       return( false);
  632.     }
  633.  
  634.     var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
  635.     if (filePicker != null) {
  636.       filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
  637.       if (filePicker == null) {
  638.         error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
  639.         return( false);
  640.       }
  641.     }
  642.     else {
  643.       error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
  644.       return( false);
  645.     }
  646.  
  647.     // The address book location was not found.
  648.     // Determine if we need to ask for a directory
  649.     // or a single file.
  650.     var file = null;
  651.     if (addInterface.GetStatus( "supportsMultiple") != 0) {
  652.       // ask for dir
  653.       try {
  654.         filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
  655.         filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  656.         filePicker.show();
  657.         if (filePicker.file && (filePicker.file.path.length > 0))
  658.           file = filePicker.file.path;
  659.         else
  660.           file = null;
  661.       } catch( ex) {
  662.         file = null;
  663.       }
  664.     }
  665.     else {
  666.       // ask for file
  667.       try {
  668.         filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrFile'), Components.interfaces.nsIFilePicker.modeOpen);
  669.         filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  670.         filePicker.show();
  671.         if (filePicker.file && (filePicker.file.path.length > 0))
  672.           file = filePicker.file.path;
  673.         else
  674.           file = null;
  675.       } catch( ex) {
  676.         file = null;
  677.       }
  678.     }
  679.  
  680.     if (file == null) {
  681.       return( false);
  682.     }
  683.  
  684.     file = CreateNewFileSpecFromPath( file);
  685.  
  686.     addInterface.SetData( "addressLocation", file);
  687.   }
  688.  
  689.   var map = addInterface.GetData( "fieldMap");
  690.   if (map != null) {
  691.     map = map.QueryInterface( Components.interfaces.nsIImportFieldMap);
  692.     if (map != null) {
  693.       var result = new Object();
  694.       result.ok = false;
  695.       top.window.openDialog(
  696.         "chrome://messenger/content/fieldMapImport.xul",
  697.         "",
  698.         "chrome,modal,titlebar",
  699.         {fieldMap: map,
  700.          addInterface: addInterface,
  701.          result: result});
  702.     }
  703.     if (result.ok == false)
  704.       return( false);
  705.   }
  706.  
  707.   if (addInterface.WantsProgress()) {
  708.     if (addInterface.BeginImport( success, error)) {
  709.       top.progressInfo.importInterface = addInterface;
  710.       // top.intervalState = setInterval( "ContinueImport()", 100);
  711.       return( true);
  712.     }
  713.     else {
  714.       return( false);
  715.     }
  716.   }
  717.   else {
  718.     if (addInterface.BeginImport( success, error)) {
  719.       return( true);
  720.     }
  721.     else {
  722.       return( false);
  723.     }
  724.   }
  725. }
  726.  
  727. function SwitchType( newType)
  728. {
  729.   top.importType = newType;
  730.   top.progressInfo.importType = newType;
  731.  
  732.   SetUpImportType();
  733.  
  734.   SetDivText('description', "");
  735. }
  736.  
  737.  
  738. function next()
  739. {
  740.   var deck = document.getElementById("stateDeck");
  741.   var index = deck.getAttribute("index");
  742.   switch (index) {
  743.   case "0":
  744.     var backButton = document.getElementById("back");
  745.     backButton.removeAttribute("disabled");
  746.     var radioGroup = document.getElementById("importFields");
  747.     SwitchType(radioGroup.value);
  748.     deck.setAttribute("index", "1");
  749.     enableAdvance();
  750.     break;
  751.   case "1":
  752.     ImportDialogOKButton();
  753.     break;
  754.   case "3":
  755.     close();
  756.     break;
  757.   }
  758. }
  759.  
  760. function enableAdvance()
  761. {
  762.   var tree = document.getElementById("moduleList");
  763.   var nextButton = document.getElementById("forward");
  764.   if (tree.selectedItems.length)
  765.     nextButton.removeAttribute("disabled");
  766.   else
  767.     nextButton.setAttribute("disabled", "true");
  768. }
  769.  
  770. function back()
  771. {
  772.   var deck = document.getElementById("stateDeck");
  773.   if (deck.getAttribute("index") == "1") {
  774.     var backButton = document.getElementById("back");
  775.     backButton.setAttribute("disabled", "true");
  776.     var nextButton = document.getElementById("forward");
  777.     nextButton.label = nextButton.getAttribute("nextval");
  778.     nextButton.removeAttribute("disabled");
  779.     deck.setAttribute("index", "0");
  780.   }
  781. }
  782.