sspitzer%netscape.com 7800223144 fix for accessibility bug #11407. the first control should have
focus when the import dialog loads.  note, we will get these types
of accessibility fixes for free when we switch the import dialog
over to use <wizard>.  (that's bug #101874)
r/sr=mscott


git-svn-id: svn://10.0.0.236/trunk@135974 18797224-902f-48f8-a5cc-f745e15eee43
2003-01-08 04:28:35 +00:00

1008 lines
33 KiB
JavaScript

/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
var importType = null;
var gImportMsgsBundle;
var importService = 0;
var successStr = null;
var errorStr = null;
var inputStr = null ;
var progressInfo = null;
var selectedModuleName = null;
var selLocIsHome = false ;
var addInterface = null ;
function OnLoadImportDialog()
{
gImportMsgsBundle = document.getElementById("bundle_importMsgs");
importService = Components.classes["@mozilla.org/import/import-service;1"].getService();
importService = top.importService.QueryInterface(Components.interfaces.nsIImportService);
progressInfo = { };
progressInfo.progressWindow = null;
progressInfo.importInterface = null;
progressInfo.mainWindow = window;
progressInfo.intervalState = 0;
progressInfo.importSuccess = false;
progressInfo.importType = null;
progressInfo.localFolderExists = false;
// look in arguments[0] for parameters
if (window.arguments && window.arguments.length >= 1 &&
"importType" in window.arguments[0] && window.arguments[0].importType)
{
// keep parameters in global for later
importType = window.arguments[0].importType;
progressInfo.importType = top.importType;
}
else
{
importType = "addressbook";
progressInfo.importType = "addressbook";
}
SetUpImportType();
// on startup, set the focus to the control element
// for accessibility reasons.
// if we used the wizardOverlay, we would get this for free.
// see bug #101874
document.getElementById("importFields").focus();
}
function SetUpImportType()
{
// set dialog title
var typeRadioGroup = document.getElementById("importFields");
switch (importType)
{
case "mail":
typeRadioGroup.selectedItem = document.getElementById("mailRadio");
break;
case "addressbook":
typeRadioGroup.selectedItem = document.getElementById("addressbookRadio");
break;
case "settings":
typeRadioGroup.selectedItem = document.getElementById("settingsRadio");
break;
}
ListModules();
}
function SetDivText(id, text)
{
var div = document.getElementById(id);
if (div) {
if (!div.childNodes.length) {
var textNode = document.createTextNode(text);
div.appendChild(textNode);
}
else if ( div.childNodes.length == 1 ) {
div.childNodes[0].nodeValue = text;
}
}
}
function CheckIfLocalFolderExists()
{
var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
if (acctMgr) {
try {
if (acctMgr.localFoldersServer)
progressInfo.localFolderExists = true;
}
catch (ex) {
progressInfo.localFolderExists = false;
}
}
}
function GetStringBundle(aURL)
{
var stringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService();
stringBundleService = stringBundleService.QueryInterface(Components.interfaces.nsIStringBundleService);
var stringBundle = stringBundleService.createBundle(aURL);
if (stringBundle)
return stringBundle.QueryInterface(Components.interfaces.nsIStringBundle);
}
function ImportDialogOKButton()
{
var listbox = document.getElementById('moduleList');
var deck = document.getElementById("stateDeck");
var header = document.getElementById("header");
var progressMeterEl = document.getElementById("progressMeter");
var progressStatusEl = document.getElementById("progressStatus");
var progressTitleEl = document.getElementById("progressTitle");
// better not mess around with navigation at this point
var nextButton = document.getElementById("forward");
nextButton.setAttribute("disabled", "true");
var backButton = document.getElementById("back");
backButton.setAttribute("disabled", "true");
if ( listbox && listbox.selectedItems && (listbox.selectedItems.length == 1) )
{
var importTypeRadioGroup = document.getElementById("importFields");
importType = importTypeRadioGroup.selectedItem.getAttribute("value");
var index = listbox.selectedItems[0].getAttribute('list-index');
var module = importService.GetModule(importType, index);
var name = importService.GetModuleName(importType, index);
selectedModuleName = name;
if (module)
{
// Fix for Bug 57839 & 85219
// We use localFoldersServer(in nsIMsgAccountManager) to check if Local Folder exists.
// We need to check localFoldersServer before importing "mail" or "settings".
// Reason: We will create an account with an incoming server of type "none" after
// importing "mail", so the localFoldersServer is valid even though the Local Folder
// is not created.
if (importType == "mail" || importType == "settings")
CheckIfLocalFolderExists();
var meterText = "";
switch(importType)
{
case "mail":
top.successStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.successStr) {
top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsString);
}
top.errorStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.errorStr)
top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsString);
if (ImportMail( module, top.successStr, top.errorStr) == true)
{
// We think it was a success, either, we need to
// wait for the import to finish
// or we are done!
if (top.progressInfo.importInterface == null) {
ShowImportResults(true, 'Mail');
return( true);
}
else {
meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
[ name ]);
header.setAttribute("description", meterText);
progressStatusEl.setAttribute("label", "");
progressTitleEl.setAttribute("label", meterText);
deck.setAttribute("selectedIndex", "2");
progressInfo.progressWindow = top.window;
progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
return( true);
}
}
else
{
ShowImportResults(false, 'Mail');
// enable back and next buttons so that users can retry or pick other import options.
nextButton.removeAttribute("disabled");
backButton.removeAttribute("disabled");
return( false);
}
break;
case "addressbook":
top.successStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.successStr)
top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsString);
top.errorStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.errorStr)
top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsString);
top.inputStr = Components.classes["@mozilla.org/supports-string;1"].createInstance();
if (top.inputStr)
top.inputStr = top.inputStr.QueryInterface( Components.interfaces.nsISupportsString);
if (ImportAddress( module, top.successStr, top.errorStr) == true) {
// We think it was a success, either, we need to
// wait for the import to finish
// or we are done!
if (top.progressInfo.importInterface == null) {
ShowImportResults(true, 'Address');
return( true);
}
else {
meterText = gImportMsgsBundle.getFormattedString('AddrProgressMeterText',
[ name ]);
header.setAttribute("description", meterText);
progressStatusEl.setAttribute("label", "");
progressTitleEl.setAttribute("label", meterText);
deck.setAttribute("selectedIndex", "2");
progressInfo.progressWindow = top.window;
progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
return( true);
}
}
else
{
ShowImportResults(false, 'Address');
// re-enable the next button, as we are here
// because the user cancelled when picking an addressbook file to import.
// enable next, so they can try again
nextButton.removeAttribute("disabled");
// also enable back button so that users can pick other import options.
backButton.removeAttribute("disabled");
return( false);
}
break;
case "settings":
var error = new Object();
error.value = null;
var newAccount = new Object();
if (!ImportSettings( module, newAccount, error))
{
if (error.value)
ShowImportResultsRaw(gImportMsgsBundle.getString('ImportSettingsFailed'), null, false);
// the user canceled the operation, shoud we dismiss
// this dialog or not?
return false;
}
else
ShowImportResultsRaw(gImportMsgsBundle.getFormattedString('ImportSettingsSuccess', [ name ]), null, true);
break;
}
}
}
return true;
}
function SetStatusText( val)
{
var progressStatus = document.getElementById("progressStatus");
progressStatus.setAttribute( "label", val);
}
function SetProgress( val)
{
var progressMeter = document.getElementById("progressMeter");
progressMeter.setAttribute( "value", val);
}
function ContinueImportCallback()
{
progressInfo.mainWindow.ContinueImport( top.progressInfo);
}
function ImportSelectionChanged()
{
var listbox = document.getElementById('moduleList');
if ( listbox && listbox.selectedItems && (listbox.selectedItems.length == 1) )
{
var index = listbox.selectedItems[0].getAttribute('list-index');
SetDivText('description', top.importService.GetModuleDescription(top.importType, index));
}
}
function CompareImportModuleName(a, b)
{
if (a.name > b.name)
return 1;
if (a.name < b.name)
return -1;
return 0;
}
function ListModules() {
if (top.importService == null)
return;
var body = document.getElementById( "moduleList");
var max = body.childNodes.length - 1;
while (max >= 0) {
body.removeChild( body.childNodes[max]);
max--;
}
var count = top.importService.GetModuleCount(top.importType);
var i;
var moduleArray = new Array(count);
for (i = 0; i < count; i++) {
moduleArray[i] = {name:top.importService.GetModuleName(top.importType, i), index:i };
}
// sort the array of modules by name, so that they'll show up in the right order
moduleArray.sort(CompareImportModuleName);
for (i = 0; i < count; i++) {
AddModuleToList(moduleArray[i].name, moduleArray[i].index);
}
}
function AddModuleToList(moduleName, index)
{
var body = document.getElementById("moduleList");
var item = document.createElement('listitem');
item.setAttribute('label', moduleName);
item.setAttribute('list-index', index);
body.appendChild(item);
}
function ContinueImport( info) {
var isMail = info.importType == 'mail' ? true : false;
var clear = true;
var deck;
var pcnt;
if (info.importInterface) {
if (!info.importInterface.ContinueImport()) {
info.importSuccess = false;
clearInterval( info.intervalState);
if (info.progressWindow != null) {
deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "3");
info.progressWindow = null;
}
ShowImportResults(false, isMail ? 'Mail' : 'Address');
}
else if ((pcnt = info.importInterface.GetProgress()) < 100) {
clear = false;
if (info.progressWindow != null) {
if (pcnt < 5)
pcnt = 5;
SetProgress( pcnt);
if (isMail) {
var mailName = info.importInterface.GetData( "currentMailbox");
if (mailName) {
mailName = mailName.QueryInterface( Components.interfaces.nsISupportsString);
if (mailName)
SetStatusText( mailName.data);
}
}
}
}
else {
dump("*** WARNING! sometimes this shows results too early. \n");
dump(" something screwy here. this used to work fine.\n");
clearInterval( info.intervalState);
info.importSuccess = true;
if (info.progressWindow) {
deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "3");
info.progressWindow = null;
}
ShowImportResults(true, isMail ? 'Mail' : 'Address');
}
}
if (clear) {
info.intervalState = null;
info.importInterface = null;
}
}
function ShowResults(doesWantProgress, result)
{
if (result)
{
if (doesWantProgress)
{
var deck = document.getElementById("stateDeck");
var header = document.getElementById("header");
var progressStatusEl = document.getElementById("progressStatus");
var progressTitleEl = document.getElementById("progressTitle");
var meterText = gImportMsgsBundle.getFormattedString('AddrProgressMeterText',
[ name ]);
header.setAttribute("description", meterText);
progressStatusEl.setAttribute("label", "");
progressTitleEl.setAttribute("label", meterText);
deck.setAttribute("selectedIndex", "2");
progressInfo.progressWindow = top.window;
progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
}
else
{
ShowImportResults(true, 'Address');
}
}
else
{
ShowImportResults(false, 'Address');
}
return true ;
}
function ShowImportResults(good, module)
{
var modSuccess = 'Import' + module + 'Success';
var modFailed = 'Import' + module + 'Failed';
var results, title;
if (good) {
title = gImportMsgsBundle.getFormattedString(modSuccess, [ selectedModuleName ? selectedModuleName : '' ]);
results = successStr.data;
}
else if (errorStr.data) {
title = gImportMsgsBundle.getFormattedString(modFailed, [ selectedModuleName ? selectedModuleName : '' ]);
results = errorStr.data;
}
if (results && title)
ShowImportResultsRaw(title, results, good);
}
function ShowImportResultsRaw(title, results, good)
{
SetDivText("status", title);
var header = document.getElementById("header");
header.setAttribute("description", title);
dump("*** results = " + results + "\n");
attachStrings("results", results);
var deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "3");
var nextButton = document.getElementById("forward");
nextButton.label = nextButton.getAttribute("finishedval");
nextButton.removeAttribute("disabled");
var cancelButton = document.getElementById("cancel");
cancelButton.setAttribute("disabled", "true");
var backButton = document.getElementById("back");
backButton.setAttribute("disabled", "true");
// If the Local Folder is not existed, create it after successfully
// import "mail" and "settings"
var checkLocalFolder = (top.progressInfo.importType == 'mail' || top.progressInfo.importType == 'settings') ? true : false;
if (good && checkLocalFolder && !top.progressInfo.localFolderExists) {
var messengerMigrator = Components.classes["@mozilla.org/messenger/migrator;1"].getService(Components.interfaces.nsIMessengerMigrator);
if (messengerMigrator)
messengerMigrator.createLocalMailAccount(false);
}
}
function attachStrings(aNode, aString)
{
var attachNode = document.getElementById(aNode);
if (!aString) {
attachNode.parentNode.setAttribute("hidden", "true");
return;
}
var strings = aString.split("\n");
for (var i = 0; i < strings.length; i++) {
if (strings[i]) {
var currNode = document.createTextNode(strings[i]);
attachNode.appendChild(currNode);
var br = document.createElementNS("http://www.w3.org/1999/xhtml", 'br');
attachNode.appendChild( br);
}
}
}
function ShowAddressComplete( good)
{
var str = null;
if (good == true) {
if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ top.selectedModuleName ]);
else
str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ "" ]);
str += "\n";
str += "\n" + top.successStr.data;
}
else {
if ((top.errorStr.data != null) && (top.errorStr.data.length > 0)) {
if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ top.selectedModuleName ]);
else
str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ "" ]);
str += "\n" + top.errorStr.data;
}
}
if (str != null)
alert( str);
}
function CreateNewFileSpecFromPath( inPath)
{
var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
if (file != null) {
file = file.QueryInterface( Components.interfaces.nsIFileSpec);
if (file != null) {
file.nativePath = inPath;
}
}
return( file);
}
/*
Import Settings from a specific module, returns false if it failed
and true if successful. A "local mail" account is returned in newAccount.
This is only useful in upgrading - import the settings first, then
import mail into the account returned from ImportSettings, then
import address books.
An error string is returned as error.value
*/
function ImportSettings( module, newAccount, error) {
var setIntf = module.GetImportInterface( "settings");
if (setIntf != null)
setIntf = setIntf.QueryInterface( Components.interfaces.nsIImportSettings);
if (setIntf == null) {
error.value = gImportMsgsBundle.getString('ImportSettingsBadModule');
return( false);
}
// determine if we can auto find the settings or if we need to ask the user
var location = new Object();
var description = new Object();
var result = setIntf.AutoLocate( description, location);
if (result == false) {
// In this case, we couldn't not find the settings
if (location.value != null) {
// Settings were not found, however, they are specified
// in a file, so ask the user for the settings file.
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
if (filePicker != null) {
var file = null;
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectSettings'), Components.interfaces.nsIFilePicker.modeOpen);
filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
filePicker.show();
if (filePicker.file && (filePicker.file.path.length > 0))
file = CreateNewFileSpecFromPath( filePicker.file.path);
else
file = null;
}
catch(ex) {
file = null;
error.value = null;
return( false);
}
if (file != null) {
setIntf.SetLocation( file);
}
else {
error.value = null;
return( false);
}
}
else {
error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
return( false);
}
}
else {
error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
return( false);
}
}
else {
error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
return( false);
}
}
// interesting, we need to return the account that new
// mail should be imported into?
// that's really only useful for "Upgrade"
result = setIntf.Import( newAccount);
if (result == false) {
error.value = gImportMsgsBundle.getString('ImportSettingsFailed');
}
return( result);
}
function CreateNewFileSpec( inFile)
{
var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
if (file != null) {
file = file.QueryInterface( Components.interfaces.nsIFileSpec);
if (file != null) {
file.fromFileSpec( inFile);
}
}
return( file);
}
function ImportMail( module, success, error) {
if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
return( false);
}
top.progressInfo.importSuccess = false;
var mailInterface = module.GetImportInterface( "mail");
if (mailInterface != null)
mailInterface = mailInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
if (mailInterface == null) {
error.data = gImportMsgsBundle.getString('ImportMailBadModule');
return( false);
}
var loc = mailInterface.GetData( "mailLocation");
if (loc == null) {
// No location found, check to see if we can ask the user.
if (mailInterface.GetStatus( "canUserSetLocation") != 0) {
if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
{
var errorValue = true;
//open the profile dialog.
var comm4xprofile = Components.classes["@mozilla.org/comm4xProfile;1"].createInstance();
if(comm4xprofile != null) {
comm4xprofile = comm4xprofile.QueryInterface( Components.interfaces.nsIComm4xProfile);
if(comm4xprofile != null) {
var length = {value:0};
var profileList = comm4xprofile.getProfileList(length);
if (profileList)
{
var selected = {value:0};
if (length.value == 1)
{
errorValue = false;
}
else {
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
if (promptService) {
var clickedOk = false;
clickedOk = promptService.select(window,
gImportMsgsBundle.getString('profileTitle'),
gImportMsgsBundle.getString('profileText'),
length.value, profileList, selected);
if (clickedOk) {
errorValue = false;
}
else {
// users cancel the pick list dialog so just return and
// don't set error string so that current dialog can stay.
return( false);
}
} // promptService
}
if (!errorValue) {
var profileDir = comm4xprofile.getMailDir(profileList[selected.value]);
mailInterface.SetData( "mailLocation", CreateNewFileSpecFromPath( profileDir));
}
} // profileList
} // comm4xprofile
} // comm4xprofile
if (errorValue) {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return(false);
}
}
else {
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
if (filePicker != null) {
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectMailDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
filePicker.show();
if (filePicker.file && (filePicker.file.path.length > 0))
mailInterface.SetData( "mailLocation", CreateNewFileSpecFromPath( filePicker.file.path));
else
return( false);
} catch( ex) {
// don't show an error when we return!
return( false);
}
}
else {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return( false);
}
}
else {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return( false);
}
}
}
else {
error.data = gImportMsgsBundle.getString('ImportMailNotFound');
return( false);
}
}
if (mailInterface.WantsProgress()) {
if (mailInterface.BeginImport( success, error, false)) {
top.progressInfo.importInterface = mailInterface;
// top.intervalState = setInterval( "ContinueImport()", 100);
return true;
}
else
return false;
}
else
return mailInterface.BeginImport( success, error, false) ? true : false;
}
// The address import! A little more complicated than the mail import
// due to field maps...
function ImportAddress( module, success, error) {
if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
return( false);
}
top.progressInfo.importSuccess = false;
addInterface = module.GetImportInterface( "addressbook");
if (addInterface != null)
addInterface = addInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
if (addInterface == null) {
error.data = gImportMsgsBundle.getString('ImportAddressBadModule');
return( false);
}
var path ;
var loc = addInterface.GetStatus( "autoFind");
if (loc == false) {
loc = addInterface.GetData( "addressLocation");
if (loc != null) {
loc = loc.QueryInterface( Components.interfaces.nsIFileSpec);
if (loc != null) {
if (!loc.exists)
loc = null;
}
}
}
if (loc == null) {
// Couldn't find the address book, see if we can
// as the user for the location or not?
if (addInterface.GetStatus( "canUserSetLocation") == 0) {
// an autofind address book that could not be found!
error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
return( false);
}
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
if (filePicker == null) {
error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
return( false);
}
}
else {
error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
return( false);
}
// The address book location was not found.
// Determine if we need to ask for a directory
// or a single file.
var file = null;
if (addInterface.GetStatus( "supportsMultiple") != 0) {
// ask for dir
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
filePicker.show();
if (filePicker.file && (filePicker.file.path.length > 0))
file = filePicker.file.path;
else
file = null;
} catch( ex) {
file = null;
}
}
else {
// ask for file
try {
filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrFile'), Components.interfaces.nsIFilePicker.modeOpen);
if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
filePicker.appendFilter(gImportMsgsBundle.getString('Comm4xFiles'),"*.na2");
else {
var addressbookBundle = GetStringBundle("chrome://messenger/locale/addressbook/addressBook.properties");
filePicker.appendFilter(addressbookBundle.GetStringFromName('LDIFFiles'), "*.ldi;*.ldif");
filePicker.appendFilter(addressbookBundle.GetStringFromName('CSVFiles'), "*.csv");
filePicker.appendFilter(addressbookBundle.GetStringFromName('TABFiles'), "*.tab;*.txt");
filePicker.appendFilters(Components.interfaces.nsIFilePicker.filterAll);
}
if (filePicker.show() == Components.interfaces.nsIFilePicker.returnCancel)
return false;
if (filePicker.file && (filePicker.file.path.length > 0))
file = filePicker.file.path;
else
file = null;
} catch( ex) {
dump("ImportAddress(): failure when picking a file to import: " + ex + "\n");
file = null;
}
}
path = filePicker.file.leafName;
if (file == null) {
return( false);
}
file = CreateNewFileSpecFromPath( file);
addInterface.SetData( "addressLocation", file);
}
// no need to use the fieldmap for 4.x import since we are using separate dialog
if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
{
var deck = document.getElementById("stateDeck");
deck.setAttribute("selectedIndex", "4");
var isHomeRadioGroup = document.getElementById("homeorwork");
isHomeRadioGroup.selectedItem = document.getElementById("workRadio");
var forwardButton = document.getElementById("forward");
forwardButton.removeAttribute("disabled");
var warning = document.getElementById("warning");
var textStr = " " + path ;
warning.setAttribute ('value', textStr) ;
return false;
}
var map = addInterface.GetData( "fieldMap");
if (map != null) {
map = map.QueryInterface( Components.interfaces.nsIImportFieldMap);
if (map != null) {
var result = new Object();
result.ok = false;
top.window.openDialog(
"chrome://messenger/content/fieldMapImport.xul",
"",
"chrome,modal,titlebar",
{fieldMap: map,
addInterface: addInterface,
result: result});
}
if (result.ok == false)
return( false);
}
if (addInterface.WantsProgress()) {
if (addInterface.BeginImport( success, error, selLocIsHome)) {
top.progressInfo.importInterface = addInterface;
// top.intervalState = setInterval( "ContinueImport()", 100);
return( true);
}
else {
return( false);
}
}
else {
if (addInterface.BeginImport( success, error, selLocIsHome)) {
return( true);
}
else {
return( false);
}
}
}
function SwitchType( newType)
{
top.importType = newType;
top.progressInfo.importType = newType;
SetUpImportType();
SetDivText('description', "");
}
function next()
{
var deck = document.getElementById("stateDeck");
var index = deck.getAttribute("selectedIndex");
switch (index) {
case "0":
var backButton = document.getElementById("back");
backButton.removeAttribute("disabled");
var radioGroup = document.getElementById("importFields");
SwitchType(radioGroup.value);
deck.setAttribute("selectedIndex", "1");
SelectFirstItem();
enableAdvance();
break;
case "1":
ImportDialogOKButton();
break;
case "3":
close();
break;
case "4" :
var isHomeRadioGroup = document.getElementById("homeorwork");
if (isHomeRadioGroup.selectedItem.getAttribute("value") == "Home")
selLocIsHome = true ;
ExportComm4x() ;
break ;
}
}
function ExportComm4x()
{
var result ;
if (addInterface.WantsProgress())
{
result = addInterface.BeginImport( successStr, errorStr, selLocIsHome) ;
top.progressInfo.importInterface = addInterface;
ShowResults(true, result) ;
}
else
{
result = addInterface.BeginImport( successStr, errorStr, selLocIsHome) ;
ShowResults(false, result) ;
}
return true ;
}
function SelectFirstItem()
{
var listbox = document.getElementById("moduleList");
listbox.selectedIndex = 0;
ImportSelectionChanged();
}
function enableAdvance()
{
var listbox = document.getElementById("moduleList");
var nextButton = document.getElementById("forward");
if (listbox.selectedItems.length)
nextButton.removeAttribute("disabled");
else
nextButton.setAttribute("disabled", "true");
}
function back()
{
var deck = document.getElementById("stateDeck");
if (deck.getAttribute("selectedIndex") == "1") {
var backButton = document.getElementById("back");
backButton.setAttribute("disabled", "true");
var nextButton = document.getElementById("forward");
nextButton.label = nextButton.getAttribute("nextval");
nextButton.removeAttribute("disabled");
deck.setAttribute("selectedIndex", "0");
}
}