Files
Mozilla/mozilla/mailnews/import/resources/content/importDialog.js
tonyr%fbdesigns.com 7d8458557d Bug #28250 Fix import of mail headers for Outlook & Eudora. r=tbesset@slb.com a=phil
git-svn-id: svn://10.0.0.236/trunk@61311 18797224-902f-48f8-a5cc-f745e15eee43
2000-02-18 19:54:13 +00:00

702 lines
19 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 = 0;
var bundle = 0;
var importService = 0;
var successStr = null;
var errorStr = null;
var progressInfo = null;
var selectedModuleName = null;
function GetBundleString( strId)
{
try {
return( top.bundle.GetStringFromName( strId));
} catch( ex) {
}
return( "String Bundle Bad");
}
function OnLoadImportDialog()
{
top.bundle = srGetStrBundle("chrome://messenger/locale/importMsgs.properties");
top.importService = Components.classes["component://mozilla/import/import-service"].createInstance();
top.importService = top.importService.QueryInterface(Components.interfaces.nsIImportService);
top.progressInfo = new Object();
top.progressInfo.progressWindow = null;
top.progressInfo.importInterface = null;
top.progressInfo.mainWindow = top.window;
top.progressInfo.intervalState = 0;
top.progressInfo.importSuccess = false;
top.progressInfo.importType = null;
doSetOKCancel(ImportDialogOKButton, 0);
// look in arguments[0] for parameters
if (window.arguments && window.arguments[0] && window.arguments.importType)
{
// keep parameters in global for later
top.importType = window.arguments[0].importType;
top.progressInfo.importType = top.importType;
}
else
{
top.importType = "addressbook";
top.progressInfo.importType = "addressbook";
}
SetUpImportType();
}
function SetUpImportType()
{
// set dialog title
switch ( top.importType )
{
case "mail":
// top.window.title = top.bundle.GetStringFromName('ImportMailDialogTitle');
SetDivText('listLabel', GetBundleString('ImportMailListLabel'));
document.getElementById( "mailRadio").checked = true;
document.getElementById( "addressbookRadio").checked = false;
document.getElementById( "settingsRadio").checked = false;
break;
case "addressbook":
// top.window.title = top.bundle.GetStringFromName('ImportAddressBooksDialogTitle');
SetDivText('listLabel', GetBundleString('ImportAddressBooksListLabel'));
document.getElementById( "addressbookRadio").checked = true;
document.getElementById( "mailRadio").checked = false;
document.getElementById( "settingsRadio").checked = false;
break;
case "settings":
// top.window.title = top.bundle.GetStringFromName('ImportSettingsDialogTitle');
SetDivText('listLabel', GetBundleString('ImportSettingsListLabel'));
document.getElementById( "settingsRadio").checked = true;
document.getElementById( "addressbookRadio").checked = false;
document.getElementById( "mailRadio").checked = false;
break;
}
ListModules();
}
function SetDivText(id, text)
{
var div = document.getElementById(id);
if ( div )
{
if ( div.childNodes.length == 0 )
{
var textNode = document.createTextNode(text);
div.appendChild(textNode);
}
else if ( div.childNodes.length == 1 ) {
div.childNodes[0].nodeValue = text;
}
}
}
function ImportDialogOKButton()
{
var tree = document.getElementById('moduleList');
if ( tree && tree.selectedItems && (tree.selectedItems.length == 1) )
{
var index = tree.selectedItems[0].getAttribute('list-index');
var module = top.importService.GetModule( top.importType, index);
var name = top.importService.GetModuleName( top.importType, index);
top.selectedModuleName = name;
if (module != null)
{
switch( top.importType )
{
case "mail":
top.successStr = Components.classes["component://netscape/supports-wstring"].createInstance();
if (top.successStr != null) {
top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsWString);
}
top.errorStr = Components.classes["component://netscape/supports-wstring"].createInstance();
if (top.errorStr != null)
top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsWString);
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) {
ShowMailComplete( true);
return( true);
}
else {
var meterText = GetBundleString( 'MailProgressMeterText') + " " + name;
// show the progress window...
top.window.openDialog(
"chrome://messenger/content/importProgress.xul",
"",
"chrome,modal",
{windowTitle: GetBundleString( 'MailProgressTitle'),
progressTitle: meterText,
progressStatus: "",
progressInfo: top.progressInfo});
dump( "*** Returned from progress window\n");
return( true);
}
}
else
{
ShowMailComplete( false);
return( false);
}
break;
case "addressbook":
top.successStr = Components.classes["component://netscape/supports-wstring"].createInstance();
if (top.successStr != null) {
top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsWString);
}
top.errorStr = Components.classes["component://netscape/supports-wstring"].createInstance();
if (top.errorStr != null)
top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsWString);
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) {
ShowAddressComplete( true);
return( true);
}
else {
var meterText = GetBundleString( 'AddrProgressMeterText') + " " + name;
// show the progress window...
top.window.openDialog(
"chrome://messenger/content/importProgress.xul",
"",
"chrome,modal",
{windowTitle: GetBundleString( 'AddrProgressTitle'),
progressTitle: meterText,
progressStatus: "",
progressInfo: top.progressInfo});
return( true);
}
}
else
{
ShowAddressComplete( false);
return( false);
}
break;
case "settings":
var error = new Object();
error.value = null;
var newAccount = new Object();
if (!ImportSettings( module, newAccount, error))
{
if (error.value != null)
{
// Show error alert with error
// information
alert( GetBundleString( 'ImportSettingsError') + name + ":\n" + error.value);
}
// the user canceled the operation, shoud we dismiss
// this dialog or not?
return false;
}
else
{
// Alert to show success
alert( GetBundleString( 'ImportSettingsSuccess') + name);
}
break;
}
}
}
return true;
}
function ImportSelectionChanged()
{
var tree = document.getElementById('moduleList');
if ( tree && tree.selectedItems && (tree.selectedItems.length == 1) )
{
var index = tree.selectedItems[0].getAttribute('list-index');
SetDivText('description', top.importService.GetModuleDescription(top.importType, index));
}
}
function ListModules() {
if (top.importService == null)
return;
var body = document.getElementById( "bucketBody");
var max = body.childNodes.length - 1;
while (max >= 0) {
body.removeChild( body.childNodes[max]);
max--;
}
var count = top.importService.GetModuleCount( top.importType);
for (var i = 0; i < count; i++) {
AddModuleToList( top.importService.GetModuleName( top.importType, i), i);
}
}
function AddModuleToList(moduleName, index)
{
var body = document.getElementById("bucketBody");
var item = document.createElement('treeitem');
var row = document.createElement('treerow');
var cell = document.createElement('treecell');
cell.setAttribute('value', moduleName);
item.setAttribute('list-index', index);
row.appendChild(cell);
item.appendChild(row);
body.appendChild(item);
}
function ContinueImport( info) {
var isMail = false;
/* dump( "*** ContinueImport\n"); */
if (info.importType == 'mail')
isMail = true;
else
isMail = false;
var clear = true;
if (info.importInterface) {
if (!info.importInterface.ContinueImport()) {
info.importSuccess = false;
clearInterval( info.intervalState);
if (info.progressWindow != null) {
info.progressWindow.close();
info.progressWindow = null;
}
if (isMail == true)
ShowMailComplete( false);
else
ShowAddressComplete( false);
}
else if ((pcnt = info.importInterface.GetProgress()) < 100) {
clear = false;
if (info.progressWindow != null) {
if (pcnt < 5)
pcnt = 5;
info.progressWindow.SetProgress( pcnt);
if (isMail == true) {
var mailName = info.importInterface.GetData( "currentMailbox");
if (mailName != null) {
mailName = mailName.QueryInterface( Components.interfaces.nsISupportsWString);
if (mailName != null)
info.progressWindow.SetDivText( 'progressStatus', mailName.data);
}
}
}
}
else {
clearInterval( info.intervalState);
info.importSuccess = true;
if (info.progressWindow != null) {
info.progressWindow.close();
info.progressWindow = null;
}
if (isMail == true)
ShowMailComplete( true);
else
ShowAddressComplete( true);
}
}
else {
dump( "*** ERROR: info.importInterface is null\n");
}
if (clear == true) {
info.intervalState = null;
info.importInterface = null;
}
}
function ShowMailComplete( good)
{
var str = null;
if (good == true) {
str = GetBundleString( 'ImportMailSuccess');
if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
str += " " + top.selectedModuleName;
str += "\n";
str += "\n" + top.successStr.data;
if ((top.errorStr.data != null) && (top.errorStr.data.length > 0))
str += "\n" + "\n" + top.errorStr.data;
}
else {
if ((top.errorStr.data != null) && (top.errorStr.data.length > 0)) {
str = GetBundleString( 'ImportMailFailed');
str += "\n" + top.errorStr.data;
}
}
if (str != null)
alert( str);
}
function ShowAddressComplete( good)
{
var str = null;
if (good == true) {
str = GetBundleString( 'ImportAddressSuccess');
if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
str += " " + top.selectedModuleName;
str += "\n";
str += "\n" + top.successStr.data;
}
else {
if ((top.errorStr.data != null) && (top.errorStr.data.length > 0)) {
str = GetBundleString( 'ImportAddressFailed');
str += "\n" + top.errorStr.data;
}
}
if (str != null)
alert( str);
}
/*
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 = GetBundleString( '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["component://netscape/filespecwithui"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFileSpecWithUI);
if (filePicker != null) {
// filePicker.create( window.top, "Select settings file", filePicker.modeLoad);
try {
filePicker.chooseInputFile( "Select settings file", filePicker.eAllFiles, null, null);
setIntf.SetLocation( filePicker.QueryInterface( Components.interfaces.nsIFileSpec));
} catch( ex) {
error.value = null;
return( false);
}
}
else {
error.value = GetBundleString( 'ImportSettingsNotFound');
return( false);
}
}
else {
error.value = GetBundleString( 'ImportSettingsNotFound');
return( false);
}
}
else {
error.value = GetBundleString( 'ImportSettingsNotFound');
return( false);
}
}
// interesting, we need to return the account that new
// mail should be imported into?
// that's really only useful for "Upgrade"
var result = setIntf.Import( newAccount);
if (result == false) {
error.value = GetBundleString( 'ImportSettingsFailed');
}
return( result);
}
function CreateNewFileSpec( inFile)
{
var file = Components.classes["component://netscape/filespec"].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 = GetBundleString( '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 = GetBundleString( '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) {
var filePicker = Components.classes["component://netscape/filespecwithui"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFileSpecWithUI);
if (filePicker != null) {
try {
filePicker.chooseDirectory( "Select mail directory");
mailInterface.SetData( "mailLocation", CreateNewFileSpec( filePicker.QueryInterface( Components.interfaces.nsIFileSpec)));
} catch( ex) {
// don't show an error when we return!
return( false);
}
}
else {
error.data = GetBundleString( 'ImportMailNotFound');
return( false);
}
}
else {
error.data = GetBundleString( 'ImportMailNotFound');
return( false);
}
}
else {
error.data = GetBundleString( 'ImportMailNotFound');
return( false);
}
}
if (mailInterface.WantsProgress()) {
if (mailInterface.BeginImport( success, error)) {
top.progressInfo.importInterface = mailInterface;
// top.intervalState = setInterval( "ContinueImport()", 100);
return( true);
}
else {
return( false);
}
}
else {
dump( "*** WantsProgress returned false\n");
if (mailInterface.BeginImport( success, error)) {
return( true);
}
else {
return( 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 = GetBundleString( 'ImportAlreadyInProgress');
return( false);
}
top.progressInfo.importSuccess = false;
var addInterface = module.GetImportInterface( "addressbook");
if (addInterface != null)
addInterface = addInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
if (addInterface == null) {
error.data = GetBundleString( 'ImportAddressBadModule');
return( false);
}
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 = GetBundleString( 'ImportAddressNotFound');
return( false);
}
var filePicker = Components.classes["component://netscape/filespecwithui"].createInstance();
if (filePicker != null) {
filePicker = filePicker.QueryInterface( Components.interfaces.nsIFileSpecWithUI);
if (filePicker == null) {
error.data = GetBundleString( 'ImportAddressNotFound');
return( false);
}
}
else {
error.data = GetBundleString( '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.chooseDirectory( "Select address book directory");
file = filePicker.QueryInterface( Components.interfaces.nsIFileSpec);
} catch( ex) {
file = null;
}
}
else {
// ask for file
try {
filePicker.chooseInputFile( "Select address book file", filePicker.eAllFiles, null, null);
file = filePicker.QueryInterface( Components.interfaces.nsIFileSpec);
} catch( ex) {
file = null;
}
}
if (file == null) {
return( false);
}
file = CreateNewFileSpec( file);
addInterface.SetData( "addressLocation", file);
}
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",
{fieldMap: map,
addInterface: addInterface,
result: result});
}
if (result.ok == false)
return( false);
}
if (addInterface.WantsProgress()) {
if (addInterface.BeginImport( success, error)) {
top.progressInfo.importInterface = addInterface;
// top.intervalState = setInterval( "ContinueImport()", 100);
return( true);
}
else {
return( false);
}
}
else {
if (addInterface.BeginImport( success, error)) {
return( true);
}
else {
return( false);
}
}
}
function SwitchType( newType)
{
top.importType = newType;
top.progressInfo.importType = newType;
SetUpImportType();
SetDivText('description', "");
}
function OnMailType()
{
SwitchType( "mail");
}
function OnSettingsType()
{
SwitchType( "settings");
}
function OnAddressType()
{
SwitchType( "addressbook");
}