зеркало из https://github.com/mozilla/gecko-dev.git
Added text import module and new UI
This commit is contained in:
Родитель
1622a83b57
Коммит
b1de7cbf3c
|
@ -21,7 +21,7 @@
|
|||
|
||||
DEPTH=..\..
|
||||
|
||||
LocalDirs=public src resources eudora
|
||||
LocalDirs=public src resources eudora text
|
||||
|
||||
|
||||
!if "$(_MSC_VER)" == "1200"
|
||||
|
|
|
@ -116,6 +116,8 @@ nsresult nsEudoraAddress::ImportAddresses( PRBool *pAbort, const PRUnichar *pNam
|
|||
|
||||
rv = pSrc->CloseStream();
|
||||
|
||||
delete [] pLine;
|
||||
|
||||
if (!eof) {
|
||||
IMPORT_LOG0( "*** Error reading the address book, didn't reach the end\n");
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
|
|
@ -228,8 +228,10 @@ nsresult nsEudoraCompose::CreateComponents( void)
|
|||
|
||||
if (NS_SUCCEEDED(rv) && m_pMsgSend) {
|
||||
rv = nsComponentManager::CreateInstance( kMsgCompFieldsCID, nsnull, nsCOMTypeInfo<nsIMsgCompFields>::GetIID(), (void **) &m_pMsgFields);
|
||||
if (NS_SUCCEEDED(rv) && m_pMsgFields)
|
||||
if (NS_SUCCEEDED(rv) && m_pMsgFields) {
|
||||
IMPORT_LOG0( "nsEudoraCompose - CreateComponents succeeded\n");
|
||||
return( NS_OK);
|
||||
}
|
||||
}
|
||||
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
@ -459,7 +461,7 @@ nsresult nsEudoraCompose::SendMessage( nsIFileSpec *pMsg)
|
|||
if (bodyType.Length())
|
||||
pMimeType = bodyType.ToNewCString();
|
||||
|
||||
// IMPORT_LOG0( "Eudora compose calling CreateAndSendMessage\n");
|
||||
IMPORT_LOG0( "Eudora compose calling CreateAndSendMessage\n");
|
||||
nsMsgAttachedFile *pAttach = GetLocalAttachments();
|
||||
|
||||
rv = m_pMsgSend->CreateAndSendMessage( nsnull, // no editor shell
|
||||
|
@ -478,6 +480,8 @@ nsresult nsEudoraCompose::SendMessage( nsIFileSpec *pMsg)
|
|||
nsnull); // listener array
|
||||
|
||||
|
||||
IMPORT_LOG0( "Returned from CreateAndSendMessage\n");
|
||||
|
||||
if (pAttach)
|
||||
delete [] pAttach;
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "nsIImportAddressBooks.h"
|
||||
#include "nsIImportABDescriptor.h"
|
||||
#include "nsIImportSettings.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
#include "nsIOutputStream.h"
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "nsTextFormater.h"
|
||||
|
@ -123,8 +124,8 @@ public:
|
|||
/* PRBool GetAutoFind (out wstring description); */
|
||||
NS_IMETHOD GetAutoFind(PRUnichar **description, PRBool *_retval);
|
||||
|
||||
/* PRBool GetNeedsFieldMap (); */
|
||||
NS_IMETHOD GetNeedsFieldMap(PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
/* PRBool GetNeedsFieldMap (nsIFileSpec location); */
|
||||
NS_IMETHOD GetNeedsFieldMap(nsIFileSpec *location, PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
|
||||
/* void GetDefaultLocation (out nsIFileSpec location, out boolean found, out boolean userVerify); */
|
||||
NS_IMETHOD GetDefaultLocation(nsIFileSpec **location, PRBool *found, PRBool *userVerify);
|
||||
|
@ -133,13 +134,13 @@ public:
|
|||
NS_IMETHOD FindAddressBooks(nsIFileSpec *location, nsISupportsArray **_retval);
|
||||
|
||||
/* nsISupports GetFieldMap (in nsIImportABDescriptor source); */
|
||||
NS_IMETHOD GetFieldMap(nsIImportABDescriptor *source, nsISupports **_retval)
|
||||
NS_IMETHOD InitFieldMap(nsIFileSpec *location, nsIImportFieldMap *fieldMap)
|
||||
{ return( NS_ERROR_FAILURE); }
|
||||
|
||||
/* void ImportAddressBook (in nsIImportABDescriptor source, in nsISupports destination, in nsISupports fieldMap, out boolean fatalError); */
|
||||
NS_IMETHOD ImportAddressBook( nsIImportABDescriptor *source,
|
||||
nsIAddrDatabase * destination,
|
||||
nsISupports * fieldMap,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** errorLog,
|
||||
PRUnichar ** successLog,
|
||||
PRBool * fatalError);
|
||||
|
@ -638,7 +639,7 @@ void ImportAddressImpl::ReportSuccess( nsString& name, nsString *pStream)
|
|||
|
||||
NS_IMETHODIMP ImportAddressImpl::ImportAddressBook( nsIImportABDescriptor *pSource,
|
||||
nsIAddrDatabase * pDestination,
|
||||
nsISupports * fieldMap,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** pErrorLog,
|
||||
PRUnichar ** pSuccessLog,
|
||||
PRBool * fatalError)
|
||||
|
|
|
@ -355,7 +355,7 @@ nsresult nsEudoraWin32::ScanDescmap( nsIFileSpec *pFolder, nsISupportsArray *pAr
|
|||
pData++;
|
||||
pStart = pData;
|
||||
fieldLen = 0;
|
||||
while ((pos < len) && (*pData != ',')) {
|
||||
while ((pos < len) && (*pData != 0x0D) && (*pData != 0x0A) && (*pData != ',')) {
|
||||
pos++;
|
||||
pData++;
|
||||
fieldLen++;
|
||||
|
@ -364,6 +364,12 @@ nsresult nsEudoraWin32::ScanDescmap( nsIFileSpec *pFolder, nsISupportsArray *pAr
|
|||
if (fieldLen)
|
||||
flag.Append( pStart, fieldLen);
|
||||
flag.Trim( kWhitespace);
|
||||
while ((pos < len) && ((*pData == 0x0D) || (*pData == 0x0A))) {
|
||||
pos++;
|
||||
pData++;
|
||||
}
|
||||
|
||||
IMPORT_LOG2( "name: %s, fName: %s\n", (const char *)name, (const char *)fName);
|
||||
|
||||
if (fName.Length() && name.Length() && (type.Length() == 1)) {
|
||||
entry->FromFileSpec( pFolder);
|
||||
|
|
|
@ -23,9 +23,11 @@
|
|||
#ifndef OEDebugLog_h___
|
||||
#define OEDebugLog_h___
|
||||
|
||||
/*
|
||||
#ifdef NS_DEBUG
|
||||
#define IMPORT_DEBUG 1
|
||||
#endif
|
||||
*/
|
||||
|
||||
#ifdef IMPORT_DEBUG
|
||||
#include "stdio.h"
|
||||
|
|
|
@ -378,22 +378,24 @@ nsresult nsOE5File::WriteMessageBuffer( nsIFileSpec *stream, char *pBuffer, PRUi
|
|||
// examine the rest of the buffer for from problems!
|
||||
PRUint32 cnt = 0;
|
||||
char * pChar = pBuffer;
|
||||
while (cnt < (size - 6)) {
|
||||
if ((*pChar == 0x0D) && (*(pChar + 1) == 0x0A) && ISFROMLINE( pChar, 2)) {
|
||||
rv = stream->Write( pBuffer, cnt + 2, &written);
|
||||
pBuffer += (cnt + 2);
|
||||
size -= (cnt + 2);
|
||||
pChar += 2;
|
||||
cnt = 0;
|
||||
if (NS_SUCCEEDED( rv)) {
|
||||
rv = stream->Write( ">", 1, &written);
|
||||
if (size > 6) {
|
||||
while (cnt < (size - 6)) {
|
||||
if ((*pChar == 0x0D) && (*(pChar + 1) == 0x0A) && ISFROMLINE( pChar, 2)) {
|
||||
rv = stream->Write( pBuffer, cnt + 2, &written);
|
||||
pBuffer += (cnt + 2);
|
||||
size -= (cnt + 2);
|
||||
pChar += 2;
|
||||
cnt = 0;
|
||||
if (NS_SUCCEEDED( rv)) {
|
||||
rv = stream->Write( ">", 1, &written);
|
||||
}
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
}
|
||||
else {
|
||||
cnt++;
|
||||
pChar++;
|
||||
}
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
}
|
||||
else {
|
||||
cnt++;
|
||||
pChar++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include "nsOEMailbox.h"
|
||||
#include "nsIImportAddressBooks.h"
|
||||
#include "nsIImportABDescriptor.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
#include "WabObject.h"
|
||||
#include "nsOEAddressIterator.h"
|
||||
#include "nsIOutputStream.h"
|
||||
|
@ -110,8 +111,8 @@ public:
|
|||
/* PRBool GetAutoFind (out wstring description); */
|
||||
NS_IMETHOD GetAutoFind(PRUnichar **description, PRBool *_retval);
|
||||
|
||||
/* PRBool GetNeedsFieldMap (); */
|
||||
NS_IMETHOD GetNeedsFieldMap(PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
/* PRBool GetNeedsFieldMap ( nsIFileSpec *location); */
|
||||
NS_IMETHOD GetNeedsFieldMap(nsIFileSpec *pLoc, PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
|
||||
/* void GetDefaultLocation (out nsIFileSpec location, out boolean found, out boolean userVerify); */
|
||||
NS_IMETHOD GetDefaultLocation(nsIFileSpec **location, PRBool *found, PRBool *userVerify)
|
||||
|
@ -120,14 +121,14 @@ public:
|
|||
/* nsISupportsArray FindAddressBooks (in nsIFileSpec location); */
|
||||
NS_IMETHOD FindAddressBooks(nsIFileSpec *location, nsISupportsArray **_retval);
|
||||
|
||||
/* nsISupports GetFieldMap (in nsIImportABDescriptor source); */
|
||||
NS_IMETHOD GetFieldMap(nsIImportABDescriptor *source, nsISupports **_retval)
|
||||
/* nsISupports InitFieldMap(nsIFileSpec *location, nsIImportFieldMap *fieldMap); */
|
||||
NS_IMETHOD InitFieldMap(nsIFileSpec *location, nsIImportFieldMap *fieldMap)
|
||||
{ return( NS_ERROR_FAILURE); }
|
||||
|
||||
/* void ImportAddressBook (in nsIImportABDescriptor source, in nsISupports destination, in nsISupports fieldMap, out boolean fatalError); */
|
||||
NS_IMETHOD ImportAddressBook( nsIImportABDescriptor *source,
|
||||
nsIAddrDatabase * destination,
|
||||
nsISupports * fieldMap,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** errorLog,
|
||||
PRUnichar ** successLog,
|
||||
PRBool * fatalError);
|
||||
|
@ -606,7 +607,7 @@ NS_IMETHODIMP ImportAddressImpl::FindAddressBooks(nsIFileSpec *location, nsISupp
|
|||
|
||||
NS_IMETHODIMP ImportAddressImpl::ImportAddressBook( nsIImportABDescriptor *source,
|
||||
nsIAddrDatabase * destination,
|
||||
nsISupports * fieldMap,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** errorLog,
|
||||
PRUnichar ** successLog,
|
||||
PRBool * fatalError)
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "nsIImportGeneric.h"
|
||||
#include "nsIImportAddressBooks.h"
|
||||
#include "nsIImportABDescriptor.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
#include "nsIOutputStream.h"
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "nsOutlookSettings.h"
|
||||
|
@ -50,6 +51,8 @@
|
|||
|
||||
#include "nsOutlookMail.h"
|
||||
|
||||
#include "MapiApi.h"
|
||||
|
||||
static NS_DEFINE_CID(kImportServiceCID, NS_IMPORTSERVICE_CID);
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
|
||||
|
@ -111,8 +114,8 @@ public:
|
|||
/* PRBool GetAutoFind (out wstring description); */
|
||||
NS_IMETHOD GetAutoFind(PRUnichar **description, PRBool *_retval);
|
||||
|
||||
/* PRBool GetNeedsFieldMap (); */
|
||||
NS_IMETHOD GetNeedsFieldMap(PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
/* PRBool GetNeedsFieldMap ( nsIFileSpec location); */
|
||||
NS_IMETHOD GetNeedsFieldMap(nsIFileSpec *location, PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
|
||||
/* void GetDefaultLocation (out nsIFileSpec location, out boolean found, out boolean userVerify); */
|
||||
NS_IMETHOD GetDefaultLocation(nsIFileSpec **location, PRBool *found, PRBool *userVerify)
|
||||
|
@ -122,13 +125,13 @@ public:
|
|||
NS_IMETHOD FindAddressBooks(nsIFileSpec *location, nsISupportsArray **_retval);
|
||||
|
||||
/* nsISupports GetFieldMap (in nsIImportABDescriptor source); */
|
||||
NS_IMETHOD GetFieldMap(nsIImportABDescriptor *source, nsISupports **_retval)
|
||||
NS_IMETHOD InitFieldMap(nsIFileSpec *location, nsIImportFieldMap *fieldMap)
|
||||
{ return( NS_ERROR_FAILURE); }
|
||||
|
||||
/* void ImportAddressBook (in nsIImportABDescriptor source, in nsISupports destination, in nsISupports fieldMap, out boolean fatalError); */
|
||||
NS_IMETHOD ImportAddressBook( nsIImportABDescriptor *source,
|
||||
nsIAddrDatabase * destination,
|
||||
nsISupports * fieldMap,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** errorLog,
|
||||
PRUnichar ** successLog,
|
||||
PRBool * fatalError);
|
||||
|
@ -333,11 +336,25 @@ NS_IMETHODIMP ImportMailImpl::GetDefaultLocation( nsIFileSpec **ppLoc, PRBool *f
|
|||
if (!ppLoc || !found || !userVerify)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// Bizarro, there really isn't a "default" location, the mail
|
||||
// is in the MAPI store and we just open it via API
|
||||
|
||||
// We'll just use an "empty" file spec for now since we
|
||||
// don't really care where the mail is.
|
||||
*found = PR_FALSE;
|
||||
*ppLoc = nsnull;
|
||||
*userVerify = PR_FALSE;
|
||||
// We need to verify here that we can get the mail, if true then
|
||||
// return a dummy location, otherwise return no location
|
||||
CMapiApi mapi;
|
||||
if (!mapi.Initialize())
|
||||
return( NS_OK);
|
||||
if (!mapi.LogOn())
|
||||
return( NS_OK);
|
||||
|
||||
CMapiFolderList store;
|
||||
if (!mapi.IterateStores( store))
|
||||
return( NS_OK);
|
||||
|
||||
if (store.GetSize() == 0)
|
||||
return( NS_OK);
|
||||
|
||||
|
||||
nsresult rv;
|
||||
nsIFileSpec * spec;
|
||||
|
@ -557,7 +574,7 @@ NS_IMETHODIMP ImportAddressImpl::FindAddressBooks(nsIFileSpec *location, nsISupp
|
|||
|
||||
NS_IMETHODIMP ImportAddressImpl::ImportAddressBook( nsIImportABDescriptor *source,
|
||||
nsIAddrDatabase * destination,
|
||||
nsISupports * fieldMap,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** errorLog,
|
||||
PRUnichar ** successLog,
|
||||
PRBool * fatalError)
|
||||
|
|
|
@ -31,6 +31,7 @@ XPIDLSRCS= .\nsIImportService.idl \
|
|||
.\nsIImportABDescriptor.idl \
|
||||
.\nsIImportSettings.idl \
|
||||
.\nsIImportMimeEncode.idl \
|
||||
.\nsIImportFieldMap.idl \
|
||||
$(NULL)
|
||||
|
||||
MODULE= import
|
||||
|
|
|
@ -65,6 +65,7 @@ interface nsISupportsArray;
|
|||
interface nsIImportABDescriptor;
|
||||
interface nsIOutputStream;
|
||||
interface nsIAddrDatabase;
|
||||
interface nsIImportFieldMap;
|
||||
|
||||
[scriptable, uuid(3fe29be0-3539-11d3-a206-00a0cc26da63)]
|
||||
interface nsIImportAddressBooks : nsISupports
|
||||
|
@ -93,7 +94,7 @@ interface nsIImportAddressBooks : nsISupports
|
|||
Returns true if the address book needs the user to specify a field map
|
||||
for address books imported from this format.
|
||||
*/
|
||||
PRBool GetNeedsFieldMap();
|
||||
PRBool GetNeedsFieldMap( in nsIFileSpec location);
|
||||
|
||||
/*
|
||||
If found and userVerify BOTH return false, then it is assumed that this
|
||||
|
@ -112,9 +113,10 @@ interface nsIImportAddressBooks : nsISupports
|
|||
nsISupportsArray FindAddressBooks( in nsIFileSpec location);
|
||||
|
||||
/*
|
||||
Get a field map for a given address book.
|
||||
Fill in defaults (if any) for a field map for importing address
|
||||
books from this location.
|
||||
*/
|
||||
nsISupports GetFieldMap( in nsIImportABDescriptor source);
|
||||
void InitFieldMap( in nsIFileSpec location, in nsIImportFieldMap fieldMap);
|
||||
|
||||
/*
|
||||
Import a specific mailbox into the destination file supplied. If an error
|
||||
|
@ -124,7 +126,7 @@ interface nsIImportAddressBooks : nsISupports
|
|||
*/
|
||||
void ImportAddressBook( in nsIImportABDescriptor source,
|
||||
in nsIAddrDatabase destination,
|
||||
in nsISupports fieldMap,
|
||||
in nsIImportFieldMap fieldMap,
|
||||
out wstring errorLog,
|
||||
out wstring successLog,
|
||||
out boolean fatalError);
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
/*
|
||||
Field map interface for importing address books
|
||||
|
||||
A field map is an arbitrary sized list of mozilla address book fields.
|
||||
The field map is used by import to map fields from the import format
|
||||
to mozilla fields.
|
||||
For export, the map contains the ordered list of mozilla fields to
|
||||
export!
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface nsIAddrDatabase;
|
||||
interface nsIMdbRow;
|
||||
interface nsIAbCard;
|
||||
|
||||
|
||||
[scriptable, uuid(1CEB9241-ADC1-11d3-A9C2-00A0CC26DA63)]
|
||||
interface nsIImportFieldMap : nsISupports
|
||||
{
|
||||
readonly attribute long numMozFields;
|
||||
readonly attribute long mapSize;
|
||||
|
||||
wstring GetFieldDescription( in long index);
|
||||
|
||||
/*
|
||||
Set the size of the field map, all unpopulated entries
|
||||
will default to -1
|
||||
*/
|
||||
void SetFieldMapSize( in long size);
|
||||
|
||||
/*
|
||||
Initialize the field map to a given size with default values
|
||||
*/
|
||||
void DefaultFieldMap( in long size);
|
||||
|
||||
/*
|
||||
Return the field number that this index maps to, -1 for no field
|
||||
*/
|
||||
long GetFieldMap( in long index);
|
||||
|
||||
/*
|
||||
Set the field that this index maps to, -1 for no field
|
||||
*/
|
||||
void SetFieldMap( in long index, in long fieldNum);
|
||||
|
||||
/*
|
||||
Set the field that this index maps to, -1 for no field
|
||||
*/
|
||||
void SetFieldMapByDescription( in long index, in wstring fieldDesc);
|
||||
|
||||
/*
|
||||
Set the value of the given field in the database row
|
||||
*/
|
||||
void SetFieldValue( in nsIAddrDatabase database, in nsIMdbRow row, in long fieldNum, in wstring value);
|
||||
|
||||
/*
|
||||
Set the value of the given field in the database row
|
||||
*/
|
||||
void SetFieldValueByDescription( in nsIAddrDatabase database, in nsIMdbRow row, in wstring fieldDesc, in wstring value);
|
||||
|
||||
/*
|
||||
Get the value of the given field from the address card
|
||||
*/
|
||||
wstring GetFieldValue( in nsIAbCard card, in long fieldNum);
|
||||
|
||||
/*
|
||||
Get the value of the given field from the address card
|
||||
*/
|
||||
wstring GetFieldValueByDescription( in nsIAbCard card, in wstring fieldDesc);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
%{ C++
|
||||
|
||||
%}
|
|
@ -28,7 +28,6 @@
|
|||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface nsIImportDriver;
|
||||
interface nsIDOMWindow;
|
||||
interface nsISupportsWString;
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ interface nsIImportModule;
|
|||
interface nsIImportMailboxDescriptor;
|
||||
interface nsIImportABDescriptor;
|
||||
interface nsIImportGeneric;
|
||||
interface nsIImportFieldMap;
|
||||
|
||||
[scriptable, uuid(50d7ea80-1726-11d3-a206-00a0cc26da63)]
|
||||
interface nsIImportService : nsISupports
|
||||
|
@ -45,10 +46,11 @@ interface nsIImportService : nsISupports
|
|||
nsIImportModule GetModule( in string filter, in long index);
|
||||
nsIImportModule GetModuleWithCID( in nsCIDRef cid);
|
||||
|
||||
nsIImportMailboxDescriptor CreateNewMailboxDescriptor();
|
||||
nsIImportABDescriptor CreateNewABDescriptor();
|
||||
nsIImportGeneric CreateNewGenericMail();
|
||||
nsIImportGeneric CreateNewGenericAddressBooks();
|
||||
nsIImportFieldMap CreateNewFieldMap();
|
||||
nsIImportMailboxDescriptor CreateNewMailboxDescriptor();
|
||||
nsIImportABDescriptor CreateNewABDescriptor();
|
||||
nsIImportGeneric CreateNewGenericMail();
|
||||
nsIImportGeneric CreateNewGenericAddressBooks();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -241,6 +241,10 @@ function ImportAddresses( module) {
|
|||
addInterface.SetData( "addressLocation", file);
|
||||
}
|
||||
|
||||
var map = addInterface.GetData( "fieldMap");
|
||||
if (map != null) {
|
||||
// FIXME: Show modal UI to handle the field map!
|
||||
}
|
||||
|
||||
if (addInterface.WantsProgress()) {
|
||||
dump( "Beginning address import with progress\n");
|
||||
|
@ -270,7 +274,7 @@ function ImportAddresses( module) {
|
|||
}
|
||||
|
||||
|
||||
function ImportSettings( module) {
|
||||
function ImportSettings( module, newAccount) {
|
||||
var setIntf = module.GetImportInterface( "settings");
|
||||
if (setIntf != null)
|
||||
setIntf = setIntf.QueryInterface( Components.interfaces.nsIImportSettings);
|
||||
|
@ -323,7 +327,6 @@ function ImportSettings( module) {
|
|||
// interesting, we need to return the account that new
|
||||
// mail should be imported into?
|
||||
// that's really only useful for "Upgrade"
|
||||
var newAccount = new Object();
|
||||
return( setIntf.Import( newAccount));
|
||||
}
|
||||
|
||||
|
@ -370,6 +373,14 @@ function eudoraAddress() {
|
|||
ImportAddresses( module);
|
||||
}
|
||||
|
||||
function importTextAddress() {
|
||||
dump( "Loading text import component\n");
|
||||
var module = Components.classes["component://mozilla/import/import-text"].createInstance();
|
||||
module = module.QueryInterface( Components.interfaces.nsIImportModule);
|
||||
dump( "Loaded text import module\n");
|
||||
|
||||
ImportAddresses( module);
|
||||
}
|
||||
|
||||
function importOESettings() {
|
||||
dump( "Loading outlook express component\n");
|
||||
|
@ -450,6 +461,7 @@ function trySettings( index) {
|
|||
<input type="button" value="Import Eudora Settings" onclick="eudoraSettings();"><br>
|
||||
<input type="button" value="Test Listings" onclick="testLists();"><br>
|
||||
<input type="button" value="Import Settings from module #2" onclick="trySettings( 2);"><br>
|
||||
<input type="button" value="Import Text Address Book" onclick="importTextAddress();"><br>
|
||||
<form>
|
||||
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,557 @@
|
|||
var importType = 0;
|
||||
var bundle = 0;
|
||||
var importService = 0;
|
||||
var successStr = null;
|
||||
var errorStr = null;
|
||||
var progressInfo = null;
|
||||
|
||||
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])
|
||||
{
|
||||
// keep parameters in global for later
|
||||
if ( window.arguments[0].importType )
|
||||
top.importType = window.arguments[0].importType;
|
||||
top.progressInfo.importType = top.importType;
|
||||
|
||||
// set dialog title
|
||||
switch ( top.importType )
|
||||
{
|
||||
case "mail":
|
||||
top.window.title = top.bundle.GetStringFromName('ImportMailDialogTitle');
|
||||
SetDivText('listLabel', top.bundle.GetStringFromName('ImportMailListLabel'));
|
||||
break;
|
||||
case "addressbook":
|
||||
top.window.title = top.bundle.GetStringFromName('ImportAddressBooksDialogTitle');
|
||||
SetDivText('listLabel', top.bundle.GetStringFromName('ImportAddressBooksListLabel'));
|
||||
break;
|
||||
case "settings":
|
||||
top.window.title = top.bundle.GetStringFromName('ImportSettingsDialogTitle');
|
||||
SetDivText('listLabel', top.bundle.GetStringFromName('ImportSettingsListLabel'));
|
||||
break;
|
||||
}
|
||||
ListModules();
|
||||
|
||||
// add module names to tree
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
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 {
|
||||
// show the progress window...
|
||||
top.window.openDialog(
|
||||
"chrome://messenger/content/importProgress.xul",
|
||||
"",
|
||||
"chrome,modal",
|
||||
{windowTitle:"My Progress Window Title",
|
||||
progressTitle: "Importing some crap",
|
||||
progressStatus: "Now importing specific crap",
|
||||
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 {
|
||||
// show the progress window...
|
||||
top.window.openDialog(
|
||||
"chrome://messenger/content/importProgress.xul",
|
||||
"",
|
||||
"chrome,modal",
|
||||
{windowTitle:"My Address Window Title",
|
||||
progressTitle: "Importing some address",
|
||||
progressStatus: "Now importing specific crap",
|
||||
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( top.bundle.GetStringFromName( '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( top.bundle.GetStringFromName( '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 count = top.importService.GetModuleCount( top.importType);
|
||||
for (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) {
|
||||
info.progressWindow.SetProgress( pcnt);
|
||||
}
|
||||
}
|
||||
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;
|
||||
if (good == true) {
|
||||
str = top.bundle.GetStringFromName( 'ImportMailSuccess');
|
||||
str += "\nsuccess: " + top.successStr.data + "\nerror:" + top.errorStr.data;
|
||||
}
|
||||
else {
|
||||
str = top.bundle.GetStringFromName( 'ImportMailFailed');
|
||||
str += "\nerror: " + top.errorStr.data;
|
||||
}
|
||||
|
||||
alert( str);
|
||||
}
|
||||
|
||||
|
||||
function ShowAddressComplete( good)
|
||||
{
|
||||
var str;
|
||||
if (good == true) {
|
||||
str = top.bundle.GetStringFromName( 'ImportAddressSuccess');
|
||||
str += "\nsuccess: " + top.successStr.data + "\nerror:" + top.errorStr.data;
|
||||
}
|
||||
else {
|
||||
str = top.bundle.GetStringFromName( 'ImportAddressFailed');
|
||||
str += "\nerror: " + top.errorStr.data;
|
||||
}
|
||||
|
||||
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 = top.bundle.GetStringFromName( '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 = top.bundle.GetStringFromName( 'ImportSettingsNotFound');
|
||||
return( false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
error.value = top.bundle.GetStringFromName( 'ImportSettingsNotFound');
|
||||
return( false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
error.value = top.bundle.GetStringFromName( '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 = top.bundle.GetStringFromName( 'ImportSettingsFailed');
|
||||
}
|
||||
return( result);
|
||||
}
|
||||
|
||||
|
||||
function ImportMail( module, success, error) {
|
||||
if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
|
||||
error.data = top.bundle.GetStringFromName( '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 = top.bundle.GetStringFromName( '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.SetLocation( filePicker.QueryInterface( Components.interfaces.nsIFileSpec));
|
||||
} catch( ex) {
|
||||
// don't show an error when we return!
|
||||
return( false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
error.data = top.bundle.GetStringFromName( 'ImportMailNotFound');
|
||||
return( false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
error.data = top.bundle.GetStringFromName( 'ImportMailNotFound');
|
||||
return( false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
error.data = top.bundle.GetStringFromName( '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 = top.bundle.GetStringFromName( '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 = top.bundle.GetStringFromName( 'ImportAddressBadModule');
|
||||
return( false);
|
||||
}
|
||||
|
||||
|
||||
var loc = addInterface.GetStatus( "autoFind");
|
||||
if (loc == false) {
|
||||
loc = addInterface.GetData( "addressLocation");
|
||||
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 = top.bundle.GetStringFromName( '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 = top.bundle.GetStringFromName( 'ImportAddressNotFound');
|
||||
return( false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
error.data = top.bundle.GetStringFromName( '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);
|
||||
}
|
||||
|
||||
addInterface.SetData( "addressLocation", file);
|
||||
}
|
||||
|
||||
var map = addInterface.GetData( "fieldMap");
|
||||
if (map != null) {
|
||||
// FIXME: Show modal UI to handle the field map!
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
The contents of this file are subject to the Netscape 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/NPL/
|
||||
|
||||
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 Communicator client code, released
|
||||
March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://messenger/skin/" type="text/css"?>
|
||||
|
||||
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
|
||||
|
||||
|
||||
<!DOCTYPE window SYSTEM "chrome://messenger/locale/importDialog.dtd">
|
||||
|
||||
|
||||
<window xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
class="dialog"
|
||||
style="padding:0px"
|
||||
onload="OnLoadImportDialog()"
|
||||
align="vertical">
|
||||
|
||||
<html:script src="chrome://global/content/strres.js"/>
|
||||
<html:script src="chrome://messenger/content/importDialog.js"/>
|
||||
<!--html:script language="JavaScript" src="resource:/res/samples/DumpDOM.js"/-->
|
||||
|
||||
<keyset id="keyset"/>
|
||||
|
||||
<box align="horizontal">
|
||||
|
||||
<spring style="width:3em"/>
|
||||
|
||||
<!-- module list -->
|
||||
<box align="vertical" style="height:170px">
|
||||
<spring style="height:1em"/>
|
||||
<html:div id="listLabel">*</html:div>
|
||||
<spring style="height:.5em"/>
|
||||
<box align="vertical" style="border: 1px inset white">
|
||||
<html:div style="width:20em; height:100px" flex="1">
|
||||
<tree id="moduleList" style="width:100%; height:100%" onselect="ImportSelectionChanged()">
|
||||
<treecol style="width:100%"/>
|
||||
<treechildren id="bucketBody"/>
|
||||
</tree>
|
||||
</html:div>
|
||||
</box>
|
||||
|
||||
<spring style="height:1.5em"/>
|
||||
|
||||
<box align="vertical" style="height: 3em; background-color:white; border:1px inset white;">
|
||||
<html:div id="description" flex="1"></html:div>
|
||||
</box>
|
||||
|
||||
<spring style="height:2em"/>
|
||||
</box>
|
||||
|
||||
<spring style="width:3em"/>
|
||||
|
||||
</box>
|
||||
|
||||
<!-- OK & Cancel buttons -->
|
||||
<box id="okCancelButtons"/>
|
||||
|
||||
</window>
|
|
@ -0,0 +1,59 @@
|
|||
|
||||
var progressMeter = 0;
|
||||
var progressInfo = null;
|
||||
|
||||
function OnLoadProgressDialog()
|
||||
{
|
||||
|
||||
|
||||
dump( "*** Loaded progress window\n");
|
||||
|
||||
top.progressMeter = document.getElementById( 'progressMeter');
|
||||
|
||||
// look in arguments[0] for parameters
|
||||
if (window.arguments && window.arguments[0])
|
||||
{
|
||||
// keep parameters in global for later
|
||||
if ( window.arguments[0].windowTitle )
|
||||
top.window.title = window.arguments[0].windowTitle;
|
||||
|
||||
if ( window.arguments[0].progressTitle )
|
||||
SetDivText( 'ProgressTitle', window.arguments[0].progressTitle );
|
||||
|
||||
if ( window.arguments[0].progressStatus )
|
||||
SetDivText( 'ProgressStatus', window.arguments[0].progressStatus );
|
||||
|
||||
top.progressInfo = window.arguments[0].progressInfo;
|
||||
}
|
||||
|
||||
top.progressInfo.progressWindow = top.window;
|
||||
top.progressInfo.intervalState = setInterval( "Continue()", 500);
|
||||
|
||||
}
|
||||
|
||||
function SetProgress( val)
|
||||
{
|
||||
top.progressMeter.setAttribute( "value", val);
|
||||
}
|
||||
|
||||
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 Continue()
|
||||
{
|
||||
top.progressInfo.mainWindow.ContinueImport( top.progressInfo);
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
The contents of this file are subject to the Netscape 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/NPL/
|
||||
|
||||
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 Communicator client code, released
|
||||
March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://messenger/skin/" type="text/css"?>
|
||||
|
||||
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
|
||||
|
||||
|
||||
<!DOCTYPE window SYSTEM "chrome://messenger/locale/importDialog.dtd">
|
||||
|
||||
|
||||
<window xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
class="dialog"
|
||||
style="padding:0px"
|
||||
onload="OnLoadProgressDialog()"
|
||||
align="vertical">
|
||||
|
||||
<html:script src="chrome://global/content/strres.js"/>
|
||||
<html:script src="chrome://messenger/content/importProgress.js"/>
|
||||
<!--html:script language="JavaScript" src="resource:/res/samples/DumpDOM.js"/-->
|
||||
|
||||
<keyset id="keyset"/>
|
||||
|
||||
<box align="vertical" flex="100%">
|
||||
|
||||
<html:div id="progressTitle">Title</html:div>
|
||||
|
||||
<spring style="height:1em"/>
|
||||
|
||||
<html:div id="progressStatus" flex="100%">Processing</html:div>
|
||||
|
||||
<spring style="height:1em"/>
|
||||
|
||||
<box align="horizontal">
|
||||
<progressmeter id="progressMeter" mode="normal" value="0" flex="100%"/>
|
||||
<spring style="width: 2em"/>
|
||||
</box>
|
||||
|
||||
<spring style="height: 1em"/>
|
||||
|
||||
</box>
|
||||
|
||||
</window>
|
|
@ -25,9 +25,17 @@ include <$(DEPTH)\config\rules.mak>
|
|||
|
||||
install::
|
||||
$(MAKE_INSTALL) import-test.html $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) importDialog.js $(DIST)\bin\chrome\messenger\content\default
|
||||
$(MAKE_INSTALL) importDialog.xul $(DIST)\bin\chrome\messenger\content\default
|
||||
$(MAKE_INSTALL) importProgress.xul $(DIST)\bin\chrome\messenger\content\default
|
||||
$(MAKE_INSTALL) importProgress.js $(DIST)\bin\chrome\messenger\content\default
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\bin\res\samples\import-test.html
|
||||
rm -f $(DIST)\bin\chrome\messenger\content\default\importDialog.js
|
||||
rm -f $(DIST)\bin\chrome\messenger\content\default\importDialog.xul
|
||||
rm -f $(DIST)\bin\chrome\messenger\content\default\importProgress.js
|
||||
rm -f $(DIST)\bin\chrome\messenger\content\default\importProgress.xul
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -78,10 +78,213 @@
|
|||
## @loc None
|
||||
2010=Unable to create an account to import mail into
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC_START
|
||||
## @loc None
|
||||
2100=First Name
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2101=Last Name
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2102=Display Name
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2103=Nickname
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2104=Primary Email
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2105=Secondary Email
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2106=Work Phone
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2107=Home Phone
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2108=Fax Number
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2109=Pager Number
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2110=Cellular Number
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2111=Home Address
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2112=Home Address 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2113=Home City
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2114=Home State
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2115=Home ZipCode
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2116=Home Country
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2117=Work Address
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2118=Work Address 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2119=Work City
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2120=Work State
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2121=Work ZipCode
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2122=Work Country
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2123=Job Title
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2124=Department
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2125=Company
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2126=Web Page 1
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2127=Web Page 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2128=Birth Year
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2129=Birth Month
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2130=Birth Day
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2131=Custom 1
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2132=Custom 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2133=Custom 3
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2134=Custom 4
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC_END
|
||||
## @loc None
|
||||
2135=Notes
|
||||
|
||||
|
||||
# Description: Strings for the import dialog
|
||||
ImportMailDialogTitle=Import Mail
|
||||
ImportAddressBooksDialogTitle=Import Address Books
|
||||
ImportSettingsDialogTitle=Import Settings
|
||||
|
||||
ImportMailListLabel=Select application to import mail from:
|
||||
ImportAddressBooksListLabel=Select address book format:
|
||||
ImportSettingsListLabel=Select application to import settings from:
|
||||
|
||||
#Error strings
|
||||
ImportAlreadyInProgress=An import operation is currently in progress, try again when the current import has finished.
|
||||
|
||||
#Error strings for settings import
|
||||
ImportSettingsBadModule=Unable to load settings module
|
||||
ImportSettingsNotFound=Unable to find settings. Check to make sure the application is installed on this machine.
|
||||
ImportSettingsFailed=An error occurred while importing settings. Some, or all, of the settings may not have been imported.
|
||||
ImportSettingsSuccess=Settings were imported from
|
||||
|
||||
#Error string for mail import
|
||||
ImportMailBadModule=Unable to load mail import module
|
||||
ImportMailNotFound=Unable to find mail to import. Check to make sure the mail application is correctly installed on this machine.
|
||||
ImportMailFailed=An error occurred importing mail from
|
||||
ImportMailSuccess=Mail was successfully imported from
|
||||
|
||||
#Error string for address import
|
||||
ImportAddressBadModule=Unable to load address book import module
|
||||
ImportAddressNotFound=Unable to find any address books to import. Check to make sure the selected application or format is correctly installed on this machine.
|
||||
ImportAddressFailed=An error occurred importing addresses from
|
||||
ImportAddressSuccess=Addresses were successfully imported from
|
||||
|
|
|
@ -42,6 +42,7 @@ CPP_OBJS=\
|
|||
.\$(OBJDIR)\nsImportScanFile.obj \
|
||||
.\$(OBJDIR)\nsImportEncodeScan.obj \
|
||||
.\$(OBJDIR)\nsImportMimeEncode.obj \
|
||||
.\$(OBJDIR)\nsImportFieldMap.obj \
|
||||
$(NULL)
|
||||
|
||||
LLIBS=\
|
||||
|
|
|
@ -24,11 +24,13 @@
|
|||
#include "prprf.h"
|
||||
#include "nscore.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIImportService.h"
|
||||
#include "nsISupportsArray.h"
|
||||
#include "nsIImportAddressBooks.h"
|
||||
#include "nsIImportGeneric.h"
|
||||
#include "nsISupportsPrimitives.h"
|
||||
#include "nsIImportABDescriptor.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
#include "nsCRT.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIURL.h"
|
||||
|
@ -47,6 +49,7 @@
|
|||
#include "nsTextFormater.h"
|
||||
#include "ImportDebug.h"
|
||||
|
||||
static NS_DEFINE_CID(kImportServiceCID, NS_IMPORTSERVICE_CID);
|
||||
static NS_DEFINE_CID(kAddressBookDBCID, NS_ADDRDATABASE_CID);
|
||||
static NS_DEFINE_CID(kProfileCID, NS_PROFILE_CID);
|
||||
static NS_DEFINE_CID(kAbDirectoryCID, NS_ABDIRECTORY_CID);
|
||||
|
@ -54,6 +57,7 @@ static NS_DEFINE_CID(kStandardUrlCID, NS_STANDARDURL_CID);
|
|||
static NS_DEFINE_IID(kIStandardUrlIID, NS_IURL_IID);
|
||||
static NS_DEFINE_CID(kAddrBookSessionCID, NS_ADDRBOOKSESSION_CID);
|
||||
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
|
||||
static NS_DEFINE_IID(kIImportFieldMapIID, NS_IIMPORTFIELDMAP_IID);
|
||||
|
||||
static const char *kDirectoryDataSourceRoot = "abdirectory://";
|
||||
static const char *kCardDataSourceRoot = "abcard://";
|
||||
|
@ -99,6 +103,7 @@ public:
|
|||
private:
|
||||
void GetDefaultLocation( void);
|
||||
void GetDefaultBooks( void);
|
||||
void GetDefaultFieldMap( void);
|
||||
|
||||
public:
|
||||
static void SetLogs( nsString& success, nsString& error, nsISupportsWString *pSuccess, nsISupportsWString *pError);
|
||||
|
@ -108,6 +113,7 @@ private:
|
|||
nsIImportAddressBooks * m_pInterface;
|
||||
nsISupportsArray * m_pBooks;
|
||||
nsIFileSpec * m_pLocation;
|
||||
nsIImportFieldMap * m_pFieldMap;
|
||||
PRBool m_autoFind;
|
||||
PRUnichar * m_description;
|
||||
PRBool m_gotLocation;
|
||||
|
@ -131,6 +137,7 @@ public:
|
|||
PRUint32 currentSize;
|
||||
nsISupportsArray * books;
|
||||
nsIImportAddressBooks * addressImport;
|
||||
nsIImportFieldMap * fieldMap;
|
||||
nsISupportsWString * successLog;
|
||||
nsISupportsWString * errorLog;
|
||||
char * pDestinationUri;
|
||||
|
@ -172,6 +179,7 @@ nsImportGenericAddressBooks::nsImportGenericAddressBooks()
|
|||
m_doImport = PR_FALSE;
|
||||
m_pThreadData = nsnull;
|
||||
m_pDestinationUri = nsnull;
|
||||
m_pFieldMap = nsnull;
|
||||
|
||||
m_pLocation = nsnull;
|
||||
m_autoFind = PR_FALSE;
|
||||
|
@ -195,6 +203,7 @@ nsImportGenericAddressBooks::~nsImportGenericAddressBooks()
|
|||
if (m_description)
|
||||
nsCRT::free( m_description);
|
||||
|
||||
NS_IF_RELEASE( m_pFieldMap);
|
||||
NS_IF_RELEASE( m_pLocation);
|
||||
NS_IF_RELEASE( m_pInterface);
|
||||
NS_IF_RELEASE( m_pBooks);
|
||||
|
@ -248,10 +257,30 @@ NS_IMETHODIMP nsImportGenericAddressBooks::GetData(const char *dataId, nsISuppor
|
|||
}
|
||||
}
|
||||
|
||||
if (!nsCRT::strcasecmp( dataId, "fieldMap")) {
|
||||
if (m_pFieldMap) {
|
||||
*_retval = m_pFieldMap;
|
||||
m_pFieldMap->AddRef();
|
||||
}
|
||||
else {
|
||||
if (m_pInterface && m_pLocation) {
|
||||
PRBool needsIt = PR_FALSE;
|
||||
m_pInterface->GetNeedsFieldMap( m_pLocation, &needsIt);
|
||||
if (needsIt) {
|
||||
GetDefaultFieldMap();
|
||||
if (m_pFieldMap) {
|
||||
*_retval = m_pFieldMap;
|
||||
m_pFieldMap->AddRef();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImportGenericAddressBooks::SetData( const char *dataId, nsISupports *item)
|
||||
{
|
||||
NS_PRECONDITION(dataId != nsnull, "null ptr");
|
||||
|
@ -288,6 +317,11 @@ NS_IMETHODIMP nsImportGenericAddressBooks::SetData( const char *dataId, nsISuppo
|
|||
}
|
||||
}
|
||||
|
||||
if (!nsCRT::strcasecmp( dataId, "fieldMap")) {
|
||||
NS_IF_RELEASE( m_pFieldMap);
|
||||
if (item)
|
||||
item->QueryInterface( nsIImportFieldMap::GetIID(), (void **) &m_pFieldMap);
|
||||
}
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
@ -323,6 +357,12 @@ NS_IMETHODIMP nsImportGenericAddressBooks::GetStatus( const char *statusKind, PR
|
|||
*_retval = (PRInt32) multi;
|
||||
}
|
||||
|
||||
if (!nsCRT::strcasecmp( statusKind, "needsFieldMap")) {
|
||||
PRBool needs = PR_FALSE;
|
||||
if (m_pInterface && m_pLocation)
|
||||
m_pInterface->GetNeedsFieldMap( m_pLocation, &needs);
|
||||
*_retval = (PRInt32) needs;
|
||||
}
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
@ -366,6 +406,36 @@ void nsImportGenericAddressBooks::GetDefaultBooks( void)
|
|||
nsresult rv = m_pInterface->FindAddressBooks( m_pLocation, &m_pBooks);
|
||||
}
|
||||
|
||||
void nsImportGenericAddressBooks::GetDefaultFieldMap( void)
|
||||
{
|
||||
if (!m_pInterface || !m_pLocation)
|
||||
return;
|
||||
|
||||
NS_IF_RELEASE( m_pFieldMap);
|
||||
|
||||
nsresult rv;
|
||||
NS_WITH_SERVICE(nsIImportService, impSvc, kImportServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) {
|
||||
IMPORT_LOG0( "*** Unable to get nsIImportService.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
rv = impSvc->CreateNewFieldMap( &m_pFieldMap);
|
||||
if (NS_FAILED( rv))
|
||||
return;
|
||||
|
||||
PRInt32 sz = 0;
|
||||
rv = m_pFieldMap->GetNumMozFields( &sz);
|
||||
if (NS_SUCCEEDED( rv))
|
||||
rv = m_pFieldMap->DefaultFieldMap( sz);
|
||||
if (NS_SUCCEEDED( rv))
|
||||
rv = m_pInterface->InitFieldMap( m_pLocation, m_pFieldMap);
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Error: Unable to initialize field map\n");
|
||||
NS_IF_RELEASE( m_pFieldMap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImportGenericAddressBooks::WantsProgress(PRBool *_retval)
|
||||
{
|
||||
|
@ -493,6 +563,8 @@ NS_IMETHODIMP nsImportGenericAddressBooks::BeginImport(nsISupportsWString *succe
|
|||
NS_ADDREF( m_pBooks);
|
||||
m_pThreadData->addressImport = m_pInterface;
|
||||
NS_ADDREF( m_pInterface);
|
||||
m_pThreadData->fieldMap = m_pFieldMap;
|
||||
NS_IF_ADDREF( m_pFieldMap);
|
||||
m_pThreadData->errorLog = m_pErrorLog;
|
||||
NS_IF_ADDREF( m_pErrorLog);
|
||||
m_pThreadData->successLog = m_pSuccessLog;
|
||||
|
@ -590,6 +662,7 @@ AddressThreadData::AddressThreadData()
|
|||
successLog = nsnull;
|
||||
errorLog = nsnull;
|
||||
pDestinationUri = nsnull;
|
||||
fieldMap = nsnull;
|
||||
}
|
||||
|
||||
AddressThreadData::~AddressThreadData()
|
||||
|
@ -601,6 +674,7 @@ AddressThreadData::~AddressThreadData()
|
|||
NS_IF_RELEASE( addressImport);
|
||||
NS_IF_RELEASE( errorLog);
|
||||
NS_IF_RELEASE( successLog);
|
||||
NS_IF_RELEASE( fieldMap);
|
||||
}
|
||||
|
||||
void AddressThreadData::DriverDelete( void)
|
||||
|
@ -826,7 +900,7 @@ PR_STATIC_CALLBACK( void) ImportAddressThread( void *stuff)
|
|||
PRUnichar *pError = nsnull;
|
||||
rv = pData->addressImport->ImportAddressBook( book,
|
||||
pDestDB, // destination
|
||||
nsnull, // fieldmap
|
||||
pData->fieldMap, // fieldmap
|
||||
&pError,
|
||||
&pSuccess,
|
||||
&fatalError);
|
||||
|
|
|
@ -0,0 +1,537 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "nsImportFieldMap.h"
|
||||
#include "nsImportStringBundle.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
NS_METHOD nsImportFieldMap::Create( nsISupports *aOuter, REFNSIID aIID, void **aResult)
|
||||
{
|
||||
if (aOuter)
|
||||
return NS_ERROR_NO_AGGREGATION;
|
||||
|
||||
nsImportFieldMap *it = new nsImportFieldMap();
|
||||
if (it == nsnull)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF( it);
|
||||
nsresult rv = it->QueryInterface( aIID, aResult);
|
||||
NS_RELEASE( it);
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsImportFieldMap, nsIImportFieldMap::GetIID());
|
||||
|
||||
nsImportFieldMap::nsImportFieldMap()
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
m_numFields = 0;
|
||||
m_pFields = nsnull;
|
||||
m_allocated = 0;
|
||||
// need to init the description array
|
||||
m_mozFieldCount = 0;
|
||||
nsIStringBundle *pBundle = nsImportStringBundle::GetStringBundle();
|
||||
nsString *pStr;
|
||||
for (PRInt32 i = IMPORT_FIELD_DESC_START; i <= IMPORT_FIELD_DESC_END; i++, m_mozFieldCount++) {
|
||||
pStr = new nsString();
|
||||
nsImportStringBundle::GetStringByID( i, *pStr, pBundle);
|
||||
m_descriptions.AppendElement( (void *)pStr);
|
||||
}
|
||||
|
||||
NS_IF_RELEASE( pBundle);
|
||||
}
|
||||
|
||||
nsImportFieldMap::~nsImportFieldMap()
|
||||
{
|
||||
if (m_pFields)
|
||||
delete [] m_pFields;
|
||||
nsString * pStr;
|
||||
for (PRInt32 i = 0; i < m_mozFieldCount; i++) {
|
||||
pStr = (nsString *) m_descriptions.ElementAt( i);
|
||||
delete pStr;
|
||||
}
|
||||
m_descriptions.Clear();
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::GetNumMozFields(PRInt32 *aNumFields)
|
||||
{
|
||||
NS_PRECONDITION(aNumFields != nsnull, "null ptr");
|
||||
if (!aNumFields)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aNumFields = m_mozFieldCount;
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::GetMapSize(PRInt32 *aNumFields)
|
||||
{
|
||||
NS_PRECONDITION(aNumFields != nsnull, "null ptr");
|
||||
if (!aNumFields)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aNumFields = m_numFields;
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::GetFieldDescription(PRInt32 index, PRUnichar **_retval)
|
||||
{
|
||||
NS_PRECONDITION(_retval != nsnull, "null ptr");
|
||||
if (!_retval)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*_retval = nsnull;
|
||||
if ((index < 0) || (index >= m_descriptions.Count()))
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
*_retval = ((nsString *)m_descriptions.ElementAt( index))->ToNewUnicode();
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::SetFieldMapSize(PRInt32 size)
|
||||
{
|
||||
nsresult rv = Allocate( size);
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
|
||||
m_numFields = size;
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::DefaultFieldMap(PRInt32 size)
|
||||
{
|
||||
nsresult rv = SetFieldMapSize( size);
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
for (PRInt32 i = 0; i < size; i++)
|
||||
m_pFields[i] = i;
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::GetFieldMap(PRInt32 index, PRInt32 *_retval)
|
||||
{
|
||||
NS_PRECONDITION(_retval != nsnull, "null ptr");
|
||||
if (!_retval)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
|
||||
if ((index < 0) || (index >= m_numFields))
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
*_retval = m_pFields[index];
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::SetFieldMap(PRInt32 index, PRInt32 fieldNum)
|
||||
{
|
||||
if (index == -1) {
|
||||
nsresult rv = Allocate( m_numFields + 1);
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
index = m_numFields;
|
||||
m_numFields++;
|
||||
}
|
||||
else {
|
||||
if ((index < 0) || (index >= m_numFields))
|
||||
return( NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
if ((fieldNum != -1) && ((fieldNum < 0) || (fieldNum >= m_mozFieldCount)))
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
m_pFields[index] = fieldNum;
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::SetFieldMapByDescription(PRInt32 index, const PRUnichar *fieldDesc)
|
||||
{
|
||||
NS_PRECONDITION(fieldDesc != nsnull, "null ptr");
|
||||
if (!fieldDesc)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
PRInt32 i = FindFieldNum( fieldDesc);
|
||||
if (i == -1)
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
return( SetFieldMap( index, i));
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::SetFieldValue(nsIAddrDatabase *database, nsIMdbRow *row, PRInt32 fieldNum, const PRUnichar *value)
|
||||
{
|
||||
NS_PRECONDITION(database != nsnull, "null ptr");
|
||||
NS_PRECONDITION(row != nsnull, "null ptr");
|
||||
NS_PRECONDITION(value != nsnull, "null ptr");
|
||||
if (!database || !row || !value)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// Allow the special value for a null field
|
||||
if (fieldNum == -1)
|
||||
return( NS_OK);
|
||||
|
||||
if ((fieldNum < 0) || (fieldNum >= m_mozFieldCount))
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
// UGGG!!!!! lot's of typing here!
|
||||
nsresult rv;
|
||||
|
||||
nsString str = value;
|
||||
char *pVal = str.ToNewCString();
|
||||
|
||||
switch( fieldNum) {
|
||||
case 0:
|
||||
rv = database->AddFirstName( row, pVal);
|
||||
break;
|
||||
case 1:
|
||||
rv = database->AddLastName( row, pVal);
|
||||
break;
|
||||
case 2:
|
||||
rv = database->AddDisplayName( row, pVal);
|
||||
break;
|
||||
case 3:
|
||||
rv = database->AddNickName( row, pVal);
|
||||
break;
|
||||
case 4:
|
||||
rv = database->AddPrimaryEmail( row, pVal);
|
||||
break;
|
||||
case 5:
|
||||
rv = database->Add2ndEmail( row, pVal);
|
||||
break;
|
||||
case 6:
|
||||
rv = database->AddWorkPhone( row, pVal);
|
||||
break;
|
||||
case 7:
|
||||
rv = database->AddHomePhone( row, pVal);
|
||||
break;
|
||||
case 8:
|
||||
rv = database->AddFaxNumber( row, pVal);
|
||||
break;
|
||||
case 9:
|
||||
rv = database->AddPagerNumber( row, pVal);
|
||||
break;
|
||||
case 10:
|
||||
rv = database->AddCellularNumber( row, pVal);
|
||||
break;
|
||||
case 11:
|
||||
rv = database->AddHomeAddress( row, pVal);
|
||||
break;
|
||||
case 12:
|
||||
rv = database->AddHomeAddress2( row, pVal);
|
||||
break;
|
||||
case 13:
|
||||
rv = database->AddHomeCity( row, pVal);
|
||||
break;
|
||||
case 14:
|
||||
rv = database->AddHomeState( row, pVal);
|
||||
break;
|
||||
case 15:
|
||||
rv = database->AddHomeZipCode( row, pVal);
|
||||
break;
|
||||
case 16:
|
||||
rv = database->AddHomeCountry( row, pVal);
|
||||
break;
|
||||
case 17:
|
||||
rv = database->AddWorkAddress( row, pVal);
|
||||
break;
|
||||
case 18:
|
||||
rv = database->AddWorkAddress2( row, pVal);
|
||||
break;
|
||||
case 19:
|
||||
rv = database->AddWorkCity( row, pVal);
|
||||
break;
|
||||
case 20:
|
||||
rv = database->AddWorkState( row, pVal);
|
||||
break;
|
||||
case 21:
|
||||
rv = database->AddWorkZipCode( row, pVal);
|
||||
break;
|
||||
case 22:
|
||||
rv = database->AddWorkCountry( row, pVal);
|
||||
break;
|
||||
case 23:
|
||||
rv = database->AddJobTitle(row, pVal);
|
||||
break;
|
||||
case 24:
|
||||
rv = database->AddDepartment(row, pVal);
|
||||
break;
|
||||
case 25:
|
||||
rv = database->AddCompany(row, pVal);
|
||||
break;
|
||||
case 26:
|
||||
rv = database->AddWebPage1(row, pVal);
|
||||
break;
|
||||
case 27:
|
||||
rv = database->AddWebPage2(row, pVal);
|
||||
break;
|
||||
case 28:
|
||||
rv = database->AddBirthYear(row, pVal);
|
||||
break;
|
||||
case 29:
|
||||
rv = database->AddBirthMonth(row, pVal);
|
||||
break;
|
||||
case 30:
|
||||
rv = database->AddBirthDay(row, pVal);
|
||||
break;
|
||||
case 31:
|
||||
rv = database->AddCustom1(row, pVal);
|
||||
break;
|
||||
case 32:
|
||||
rv = database->AddCustom2(row, pVal);
|
||||
break;
|
||||
case 33:
|
||||
rv = database->AddCustom3(row, pVal);
|
||||
break;
|
||||
case 34:
|
||||
rv = database->AddCustom4(row, pVal);
|
||||
break;
|
||||
case 35:
|
||||
rv = database->AddNotes(row, pVal);
|
||||
break;
|
||||
default:
|
||||
/* Get the field description, and add it as an anonymous attr? */
|
||||
/* OR WHAT???? */
|
||||
{
|
||||
rv = NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
nsCRT::free( pVal);
|
||||
|
||||
return( rv);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::SetFieldValueByDescription(nsIAddrDatabase *database, nsIMdbRow *row, const PRUnichar *fieldDesc, const PRUnichar *value)
|
||||
{
|
||||
NS_PRECONDITION(fieldDesc != nsnull, "null ptr");
|
||||
if (!fieldDesc)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
PRInt32 i = FindFieldNum( fieldDesc);
|
||||
if (i == -1)
|
||||
return( NS_ERROR_FAILURE);
|
||||
return( SetFieldValue( database, row, i, value));
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::GetFieldValue(nsIAbCard *card, PRInt32 fieldNum, PRUnichar **_retval)
|
||||
{
|
||||
NS_PRECONDITION(_retval != nsnull, "null ptr");
|
||||
NS_PRECONDITION(card != nsnull, "null ptr");
|
||||
if (!_retval || !card)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
if (fieldNum == -1) {
|
||||
PRUnichar c = 0;
|
||||
*_retval = nsCRT::strdup( &c);
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
if ((fieldNum < 0) || (fieldNum >= m_mozFieldCount))
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
// ARRGGG!!! Lots of typing again
|
||||
// get the field from the card
|
||||
nsresult rv;
|
||||
PRUnichar * pVal = nsnull;
|
||||
|
||||
switch (fieldNum) {
|
||||
case 0:
|
||||
rv = card->GetFirstName( &pVal);
|
||||
break;
|
||||
case 1:
|
||||
rv = card->GetLastName( &pVal);
|
||||
break;
|
||||
case 2:
|
||||
rv = card->GetDisplayName( &pVal);
|
||||
break;
|
||||
case 3:
|
||||
rv = card->GetNickName( &pVal);
|
||||
break;
|
||||
case 4:
|
||||
rv = card->GetPrimaryEmail( &pVal);
|
||||
break;
|
||||
case 5:
|
||||
rv = card->GetSecondEmail( &pVal);
|
||||
break;
|
||||
case 6:
|
||||
rv = card->GetWorkPhone( &pVal);
|
||||
break;
|
||||
case 7:
|
||||
rv = card->GetHomePhone( &pVal);
|
||||
break;
|
||||
case 8:
|
||||
rv = card->GetFaxNumber( &pVal);
|
||||
break;
|
||||
case 9:
|
||||
rv = card->GetPagerNumber( &pVal);
|
||||
break;
|
||||
case 10:
|
||||
rv = card->GetCellularNumber( &pVal);
|
||||
break;
|
||||
case 11:
|
||||
rv = card->GetHomeAddress( &pVal);
|
||||
break;
|
||||
case 12:
|
||||
rv = card->GetHomeAddress2( &pVal);
|
||||
break;
|
||||
case 13:
|
||||
rv = card->GetHomeCity( &pVal);
|
||||
break;
|
||||
case 14:
|
||||
rv = card->GetHomeState( &pVal);
|
||||
break;
|
||||
case 15:
|
||||
rv = card->GetHomeZipCode( &pVal);
|
||||
break;
|
||||
case 16:
|
||||
rv = card->GetHomeCountry( &pVal);
|
||||
break;
|
||||
case 17:
|
||||
rv = card->GetWorkAddress( &pVal);
|
||||
break;
|
||||
case 18:
|
||||
rv = card->GetWorkAddress2( &pVal);
|
||||
break;
|
||||
case 19:
|
||||
rv = card->GetWorkCity( &pVal);
|
||||
break;
|
||||
case 20:
|
||||
rv = card->GetWorkState( &pVal);
|
||||
break;
|
||||
case 21:
|
||||
rv = card->GetWorkZipCode( &pVal);
|
||||
break;
|
||||
case 22:
|
||||
rv = card->GetWorkCountry( &pVal);
|
||||
break;
|
||||
case 23:
|
||||
rv = card->GetJobTitle( &pVal);
|
||||
break;
|
||||
case 24:
|
||||
rv = card->GetDepartment( &pVal);
|
||||
break;
|
||||
case 25:
|
||||
rv = card->GetCompany( &pVal);
|
||||
break;
|
||||
case 26:
|
||||
rv = card->GetWebPage1( &pVal);
|
||||
break;
|
||||
case 27:
|
||||
rv = card->GetWebPage2( &pVal);
|
||||
break;
|
||||
case 28:
|
||||
rv = card->GetBirthYear( &pVal);
|
||||
break;
|
||||
case 29:
|
||||
rv = card->GetBirthMonth( &pVal);
|
||||
break;
|
||||
case 30:
|
||||
rv = card->GetBirthDay( &pVal);
|
||||
break;
|
||||
case 31:
|
||||
rv = card->GetCustom1( &pVal);
|
||||
break;
|
||||
case 32:
|
||||
rv = card->GetCustom2( &pVal);
|
||||
break;
|
||||
case 33:
|
||||
rv = card->GetCustom3( &pVal);
|
||||
break;
|
||||
case 34:
|
||||
rv = card->GetCustom4( &pVal);
|
||||
break;
|
||||
case 35:
|
||||
rv = card->GetNotes( &pVal);
|
||||
break;
|
||||
default:
|
||||
/* Get the field description, and add it as an anonymous attr? */
|
||||
/* OR WHAT???? */
|
||||
{
|
||||
rv = NS_ERROR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
*_retval = pVal;
|
||||
|
||||
return( rv);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportFieldMap::GetFieldValueByDescription(nsIAbCard *card, const PRUnichar *fieldDesc, PRUnichar **_retval)
|
||||
{
|
||||
NS_PRECONDITION(fieldDesc != nsnull, "null ptr");
|
||||
if (!fieldDesc)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
PRInt32 i = FindFieldNum( fieldDesc);
|
||||
if (i == -1)
|
||||
return( NS_ERROR_FAILURE);
|
||||
return( GetFieldValue( card, i, _retval));
|
||||
}
|
||||
|
||||
|
||||
nsresult nsImportFieldMap::Allocate( PRInt32 newSize)
|
||||
{
|
||||
if (newSize <= m_allocated)
|
||||
return( NS_OK);
|
||||
|
||||
PRInt32 sz = m_allocated;
|
||||
while (sz < newSize)
|
||||
sz += 30;
|
||||
|
||||
PRInt32 *pData = new PRInt32[ sz];
|
||||
|
||||
if (!pData)
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
PRInt32 i;
|
||||
for (i = 0; i < sz; i++)
|
||||
pData[i] = -1;
|
||||
if (m_numFields) {
|
||||
for (i = 0; i < m_numFields; i++)
|
||||
pData[i] = m_pFields[i];
|
||||
delete [] m_pFields;
|
||||
}
|
||||
m_allocated = sz;
|
||||
m_pFields = pData;
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
PRInt32 nsImportFieldMap::FindFieldNum( const PRUnichar *pDesc)
|
||||
{
|
||||
nsString * pStr;
|
||||
for (PRInt32 i = 0; i < m_mozFieldCount; i++) {
|
||||
pStr = (nsString *)m_descriptions.ElementAt( i);
|
||||
if (!pStr->Compare( pDesc))
|
||||
return( i);
|
||||
}
|
||||
|
||||
return( -1);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
#ifndef nsImportFieldMap_h___
|
||||
#define nsImportFieldMap_h___
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "nsVoidArray.h"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
class nsImportFieldMap : public nsIImportFieldMap
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_DECL_NSIIMPORTFIELDMAP
|
||||
|
||||
nsImportFieldMap();
|
||||
virtual ~nsImportFieldMap();
|
||||
|
||||
static NS_METHOD Create( nsISupports *aOuter, REFNSIID aIID, void **aResult);
|
||||
|
||||
private:
|
||||
nsresult Allocate( PRInt32 newSize);
|
||||
PRInt32 FindFieldNum( const PRUnichar *pDesc);
|
||||
|
||||
|
||||
private:
|
||||
PRInt32 m_numFields;
|
||||
PRInt32 * m_pFields;
|
||||
PRInt32 m_allocated;
|
||||
nsVoidArray m_descriptions;
|
||||
PRInt32 m_mozFieldCount;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -34,6 +34,7 @@
|
|||
#include "nsImportMailboxDescriptor.h"
|
||||
#include "nsImportABDescriptor.h"
|
||||
#include "nsIImportGeneric.h"
|
||||
#include "nsImportFieldMap.h"
|
||||
#include "plstr.h"
|
||||
#include "prmem.h"
|
||||
#include "ImportDebug.h"
|
||||
|
@ -82,6 +83,8 @@ public:
|
|||
/* nsIImportModule GetModuleWithCID (in nsCIDRef cid); */
|
||||
NS_IMETHOD GetModuleWithCID(const nsCID & cid, nsIImportModule **_retval);
|
||||
|
||||
/* nsIImportFieldMap CreateNewFieldMap (); */
|
||||
NS_IMETHOD CreateNewFieldMap(nsIImportFieldMap **_retval);
|
||||
|
||||
/* nsIImportMailboxDescriptor CreateNewMailboxDescriptor (); */
|
||||
NS_IMETHOD CreateNewMailboxDescriptor(nsIImportMailboxDescriptor **_retval);
|
||||
|
@ -196,6 +199,8 @@ nsImportService::nsImportService() : m_pModules( nsnull)
|
|||
|
||||
nsImportService::~nsImportService()
|
||||
{
|
||||
gImportService = nsnull;
|
||||
|
||||
if (m_pModules != nsnull)
|
||||
delete m_pModules;
|
||||
|
||||
|
@ -214,6 +219,13 @@ NS_IMETHODIMP nsImportService::DiscoverModules( void)
|
|||
return( DoDiscover());
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportService::CreateNewFieldMap( nsIImportFieldMap **_retval)
|
||||
{
|
||||
nsresult rv;
|
||||
rv = nsImportFieldMap::Create( nsnull, nsIImportFieldMap::GetIID(), (void**)_retval);
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImportService::CreateNewMailboxDescriptor( nsIImportMailboxDescriptor **_retval)
|
||||
{
|
||||
nsresult rv;
|
||||
|
|
|
@ -50,5 +50,8 @@ public:
|
|||
#define IMPORT_ERROR_MB_CREATE 2009
|
||||
#define IMPORT_ERROR_MB_NODESTFOLDER 2010
|
||||
|
||||
#define IMPORT_FIELD_DESC_START 2100
|
||||
#define IMPORT_FIELD_DESC_END 2135
|
||||
|
||||
|
||||
#endif /* _nsImportStringBundle_H__ */
|
||||
|
|
Двоичный файл не отображается.
|
@ -0,0 +1,21 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "MacPrefix.h"
|
|
@ -0,0 +1,21 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "MacPrefix_debug.h"
|
|
@ -0,0 +1,25 @@
|
|||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..
|
||||
|
||||
DIRS=resources src
|
||||
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1999 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..\..\..\..
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
install::
|
||||
$(MAKE_INSTALL) textImportMsgs.properties $(DIST)\bin\chrome\messenger\locale\en-US
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)bin\chrome\messenger\locale\en-US\textImportMsgs.properties
|
||||
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# The following are used by the outlook express import code to display status/error
|
||||
# and informational messages
|
||||
#
|
||||
|
||||
# Short name of import module
|
||||
## @name TEXTIMPORT_NAME
|
||||
## @loc None
|
||||
2000=Text
|
||||
|
||||
# Description of import module
|
||||
## @name TEXTIMPORT_DESCRIPTION
|
||||
## @loc None
|
||||
2001=Address books in text format, comma or tab delimitted
|
||||
|
||||
# Description of import module
|
||||
## @name TEXTIMPORT_ADDRESS_NAME
|
||||
## @loc None
|
||||
2002=Text Address Book
|
||||
|
||||
# Description
|
||||
## @name TEXTIMPORT_ADDRESS_SUCCESS
|
||||
## @loc None
|
||||
2003=Imported address book %S
|
||||
|
||||
# Error message
|
||||
## @name TEXTIMPORT_ADDRESS_BADPARAM
|
||||
## @loc None
|
||||
2004=Bad parameter passed to import address book.
|
||||
|
||||
# Error message
|
||||
## @name TEXTIMPORT_ADDRESS_BADSOURCEFILE
|
||||
## @loc None
|
||||
2005=Error accessing file for address book %S.
|
||||
|
||||
# Error message
|
||||
## @name TEXTIMPORT_ADDRESS_CONVERTERROR
|
||||
## @loc None
|
||||
2006=Error importing address book %S, all addresses may not have been imported.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1999 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..\..\..
|
||||
|
||||
DIRS= en-US
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
|
@ -0,0 +1,22 @@
|
|||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1999 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..\..
|
||||
|
||||
DIRS= locale
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
|
@ -0,0 +1,45 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef TextDebugLog_h___
|
||||
#define TextDebugLog_h___
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
#define IMPORT_DEBUG 1
|
||||
#endif
|
||||
|
||||
#ifdef IMPORT_DEBUG
|
||||
#include "stdio.h"
|
||||
|
||||
#define IMPORT_LOG0( x) printf( x)
|
||||
#define IMPORT_LOG1( x, y) printf( x, y)
|
||||
#define IMPORT_LOG2( x, y, z) printf( x, y, z)
|
||||
#define IMPORT_LOG3( a, b, c, d) printf( a, b, c, d)
|
||||
|
||||
#else
|
||||
|
||||
#define IMPORT_LOG0( x)
|
||||
#define IMPORT_LOG1( x, y)
|
||||
#define IMPORT_LOG2( x, y, z)
|
||||
#define IMPORT_LOG3( a, b, c, d)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif /* TextDebugLog_h___ */
|
|
@ -0,0 +1,44 @@
|
|||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..\..\..
|
||||
|
||||
MODULE=impText
|
||||
|
||||
MAKE_OBJ_TYPE=DLL
|
||||
DLLNAME=$(MODULE)
|
||||
DLL=.\$(OBJDIR)\$(DLLNAME).dll
|
||||
|
||||
|
||||
CPP_OBJS=\
|
||||
.\$(OBJDIR)\nsTextFactory.obj \
|
||||
.\$(OBJDIR)\nsTextStringBundle.obj \
|
||||
.\$(OBJDIR)\nsTextImport.obj \
|
||||
.\$(OBJDIR)\nsTextAddress.obj \
|
||||
$(NULL)
|
||||
|
||||
LLIBS=\
|
||||
$(DIST)\lib\xpcom.lib \
|
||||
$(DIST)\lib\plc3.lib \
|
||||
$(LIBNSPR) \
|
||||
$(NULL)
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
install:: $(DLL)
|
||||
$(MAKE_INSTALL) $(DLL) $(DIST)\bin\components
|
||||
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,79 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsTextAddress_h__
|
||||
#define nsTextAddress_h__
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsString.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "nsIFileSpec.h"
|
||||
#include "nsISupportsArray.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
|
||||
|
||||
class nsIAddrDatabase;
|
||||
class nsIMdbRow;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class nsTextAddress {
|
||||
public:
|
||||
nsTextAddress();
|
||||
virtual ~nsTextAddress();
|
||||
|
||||
nsresult ImportAddresses( PRBool *pAbort, const PRUnichar *pName, nsIFileSpec *pSrc, nsIAddrDatabase *pDb, nsIImportFieldMap *fieldMap, nsString& errors);
|
||||
nsresult ImportLDIF( PRBool *pAbort, const PRUnichar *pName, nsIFileSpec *pSrc, nsIAddrDatabase *pDb, nsString& errors);
|
||||
|
||||
nsresult DetermineDelim( nsIFileSpec *pSrc);
|
||||
|
||||
static nsresult IsLDIFFile( nsIFileSpec *pSrc, PRBool *pIsLDIF);
|
||||
|
||||
static nsresult ReadRecordNumber( nsIFileSpec *pSrc, char *pLine, PRInt32 bufferSz, char delim, PRInt32 *pLineLen, PRInt32 rNum);
|
||||
static nsresult ReadRecord( nsIFileSpec *pSrc, char *pLine, PRInt32 bufferSz, char delim, PRInt32 *pLineLen);
|
||||
static PRBool GetField( const char *pLine, PRInt32 maxLen, PRInt32 index, nsCString& field, char delim);
|
||||
|
||||
private:
|
||||
nsresult ProcessLine( const char *pLine, PRInt32 len, nsString& errors);
|
||||
|
||||
static PRBool IsLineComplete( const char *pLine, PRInt32 len, char delim);
|
||||
static PRInt32 CountFields( const char *pLine, PRInt32 maxLen, char delim);
|
||||
static void SanitizeSingleLine( nsCString& val);
|
||||
|
||||
private:
|
||||
// LDIF stuff, this wasn't originally written by me!
|
||||
nsresult str_parse_line( char *line, char **type, char **value, int *vlen);
|
||||
char * str_getline( char **next);
|
||||
nsresult GetLdifStringRecord(char* buf, PRInt32 len, PRInt32& stopPos);
|
||||
nsresult ParseLdifFile( nsIFileSpec *pSrc);
|
||||
void AddLdifRowToDatabase( void);
|
||||
void AddLdifColToDatabase(nsIMdbRow* newRow, char* typeSlot, char* valueSlot);
|
||||
|
||||
private:
|
||||
nsCString m_ldifLine;
|
||||
char m_delim;
|
||||
nsIAddrDatabase * m_database;
|
||||
nsIImportFieldMap * m_fieldMap;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif /* nsTextAddress_h__ */
|
||||
|
|
@ -0,0 +1,365 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
Text import module
|
||||
*/
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIModule.h"
|
||||
#include "nsIGenericFactory.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIRegistry.h"
|
||||
#include "nsIImportService.h"
|
||||
#include "nsTextImport.h"
|
||||
|
||||
#include "TextDebugLog.h"
|
||||
|
||||
static NS_DEFINE_CID(kTextImportCID, NS_TEXTIMPORT_CID);
|
||||
static NS_DEFINE_CID(kImportServiceCID, NS_IMPORTSERVICE_CID);
|
||||
static NS_DEFINE_CID(kRegistryCID, NS_REGISTRY_CID);
|
||||
|
||||
/*
|
||||
This doesn't work for me because I need to do some
|
||||
additional work in RegisterSelf.
|
||||
However, I should be able to delegate to the generic implementation
|
||||
and just do the extra work I need?
|
||||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsEudoraImport)
|
||||
|
||||
static nsModuleComponentInfo components[] = {
|
||||
{ "Eudora Import Component",
|
||||
NS_EUDORAIMPORT_CID,
|
||||
"component://mozilla/import/import-eudora",
|
||||
nsEudoraImportConstructor}
|
||||
};
|
||||
|
||||
NS_IMPL_NSGETMODULE("nsEudoraImportModule", components)
|
||||
*/
|
||||
|
||||
// Module implementation for the Eudora import library
|
||||
class nsTextImportModule : public nsIModule
|
||||
{
|
||||
public:
|
||||
nsTextImportModule();
|
||||
virtual ~nsTextImportModule();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_DECL_NSIMODULE
|
||||
|
||||
protected:
|
||||
nsresult Initialize();
|
||||
|
||||
void Shutdown();
|
||||
|
||||
PRBool mInitialized;
|
||||
nsCOMPtr<nsIGenericFactory> mFactory;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// Functions used to create new instances of a given object by the
|
||||
// generic factory.
|
||||
|
||||
#define MAKE_CTOR(_iface, _name) \
|
||||
static NS_IMETHODIMP \
|
||||
CreateNew##_name(nsISupports* aOuter, REFNSIID aIID, void **aResult) \
|
||||
{ \
|
||||
if (!aResult) { \
|
||||
return NS_ERROR_INVALID_POINTER; \
|
||||
} \
|
||||
if (aOuter) { \
|
||||
*aResult = nsnull; \
|
||||
return NS_ERROR_NO_AGGREGATION; \
|
||||
} \
|
||||
nsI##_iface* inst; \
|
||||
nsresult rv = NS_New##_name(&inst); \
|
||||
if (NS_FAILED(rv)) { \
|
||||
*aResult = nsnull; \
|
||||
return rv; \
|
||||
} \
|
||||
rv = inst->QueryInterface(aIID, aResult); \
|
||||
if (NS_FAILED(rv)) { \
|
||||
*aResult = nsnull; \
|
||||
} \
|
||||
NS_RELEASE(inst); /* get rid of extra refcnt */ \
|
||||
return rv; \
|
||||
}
|
||||
|
||||
MAKE_CTOR(ImportModule, TextImport)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
static NS_DEFINE_IID(kIModuleIID, NS_IMODULE_IID);
|
||||
|
||||
nsTextImportModule::nsTextImportModule()
|
||||
: mInitialized(PR_FALSE)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
|
||||
nsTextImportModule::~nsTextImportModule()
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsTextImportModule, kIModuleIID)
|
||||
|
||||
// Perform our one-time intialization for this module
|
||||
nsresult nsTextImportModule::Initialize()
|
||||
{
|
||||
if (mInitialized) {
|
||||
return NS_OK;
|
||||
}
|
||||
mInitialized = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Shutdown this module, releasing all of the module resources
|
||||
void nsTextImportModule::Shutdown()
|
||||
{
|
||||
// Release the factory object
|
||||
mFactory = nsnull;
|
||||
}
|
||||
|
||||
// Create a factory object for creating instances of aClass.
|
||||
NS_IMETHODIMP nsTextImportModule::GetClassObject(nsIComponentManager *aCompMgr,
|
||||
const nsCID& aClass,
|
||||
const nsIID& aIID,
|
||||
void** r_classObj)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
// Defensive programming: Initialize *r_classObj in case of error below
|
||||
if (!r_classObj) {
|
||||
return NS_ERROR_INVALID_POINTER;
|
||||
}
|
||||
*r_classObj = NULL;
|
||||
|
||||
// Do one-time-only initialization if necessary
|
||||
if (!mInitialized) {
|
||||
rv = Initialize();
|
||||
if (NS_FAILED(rv)) {
|
||||
// Initialization failed! yikes!
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
// Choose the appropriate factory, based on the desired instance
|
||||
// class type (aClass).
|
||||
nsCOMPtr<nsIGenericFactory> fact;
|
||||
if (aClass.Equals(kTextImportCID)) {
|
||||
if (!mFactory) {
|
||||
// Create and save away the factory object for creating
|
||||
// new instances of Sample. This way if we are called
|
||||
// again for the factory, we won't need to create a new
|
||||
// one.
|
||||
rv = NS_NewGenericFactory(getter_AddRefs(mFactory),
|
||||
CreateNewTextImport);
|
||||
}
|
||||
fact = mFactory;
|
||||
}
|
||||
else {
|
||||
rv = NS_ERROR_FACTORY_NOT_REGISTERED;
|
||||
#ifdef DEBUG
|
||||
char* cs = aClass.ToString();
|
||||
printf("+++ nsTextImportModule: unable to create factory for %s\n", cs);
|
||||
nsCRT::free(cs);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (fact) {
|
||||
rv = fact->QueryInterface(aIID, r_classObj);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//----------------------------------------
|
||||
|
||||
struct Components {
|
||||
const char* mDescription;
|
||||
const nsID* mCID;
|
||||
const char* mProgID;
|
||||
};
|
||||
|
||||
// The list of components we register
|
||||
static Components gComponents[] = {
|
||||
{ "Text Import Component", &kTextImportCID,
|
||||
"component://mozilla/import/import-text", },
|
||||
};
|
||||
#define NUM_COMPONENTS (sizeof(gComponents) / sizeof(gComponents[0]))
|
||||
|
||||
nsresult GetImportModulesRegKey( nsIRegistry *reg, nsRegistryKey *pKey)
|
||||
{
|
||||
nsRegistryKey nScapeKey;
|
||||
|
||||
nsresult rv = reg->GetSubtree( nsIRegistry::Common, "Netscape", &nScapeKey);
|
||||
if (NS_FAILED(rv)) {
|
||||
rv = reg->AddSubtree( nsIRegistry::Common, "Netscape", &nScapeKey);
|
||||
}
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
|
||||
nsRegistryKey iKey;
|
||||
rv = reg->GetSubtree( nScapeKey, "Import", &iKey);
|
||||
if (NS_FAILED( rv)) {
|
||||
rv = reg->AddSubtree( nScapeKey, "Import", &iKey);
|
||||
}
|
||||
|
||||
if (NS_FAILED( rv))
|
||||
return( rv);
|
||||
|
||||
rv = reg->GetSubtree( iKey, "Modules", pKey);
|
||||
if (NS_FAILED( rv)) {
|
||||
rv = reg->AddSubtree( iKey, "Modules", pKey);
|
||||
}
|
||||
|
||||
return( rv);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTextImportModule::RegisterSelf(nsIComponentManager *aCompMgr,
|
||||
nsIFileSpec* aPath,
|
||||
const char* registryLocation,
|
||||
const char* componentType)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("*** Registering Text import components\n");
|
||||
#endif
|
||||
|
||||
Components* cp = gComponents;
|
||||
Components* end = cp + NUM_COMPONENTS;
|
||||
while (cp < end) {
|
||||
rv = aCompMgr->RegisterComponentSpec(*cp->mCID, cp->mDescription,
|
||||
cp->mProgID, aPath, PR_TRUE,
|
||||
PR_TRUE);
|
||||
if (NS_FAILED(rv)) {
|
||||
#ifdef DEBUG
|
||||
printf("nsTextImportModule: unable to register %s component => %x\n",
|
||||
cp->mDescription, rv);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
|
||||
{
|
||||
NS_WITH_SERVICE( nsIRegistry, reg, kRegistryCID, &rv);
|
||||
if (NS_FAILED(rv)) {
|
||||
IMPORT_LOG0( "*** Import Text, ERROR GETTING THE Registry\n");
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = reg->OpenDefault();
|
||||
if (NS_FAILED(rv)) {
|
||||
IMPORT_LOG0( "*** Import Text, ERROR OPENING THE REGISTRY\n");
|
||||
return( rv);
|
||||
}
|
||||
|
||||
nsRegistryKey importKey;
|
||||
|
||||
rv = GetImportModulesRegKey( reg, &importKey);
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Import Text, ERROR getting Netscape/Import registry key\n");
|
||||
return( rv);
|
||||
}
|
||||
|
||||
nsRegistryKey key;
|
||||
rv = reg->AddSubtree( importKey, "Text", &key);
|
||||
if (NS_FAILED(rv)) return( rv);
|
||||
|
||||
rv = reg->SetString( key, "Supports", kTextSupportsString);
|
||||
if (NS_FAILED(rv)) return( rv);
|
||||
char *myCID = kTextImportCID.ToString();
|
||||
rv = reg->SetString( key, "CLSID", myCID);
|
||||
delete [] myCID;
|
||||
if (NS_FAILED(rv)) return( rv);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTextImportModule::UnregisterSelf(nsIComponentManager* aCompMgr,
|
||||
nsIFileSpec* aPath,
|
||||
const char* registryLocation)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
printf("*** Unregistering Text import components\n");
|
||||
#endif
|
||||
Components* cp = gComponents;
|
||||
Components* end = cp + NUM_COMPONENTS;
|
||||
while (cp < end) {
|
||||
nsresult rv = aCompMgr->UnregisterComponentSpec(*cp->mCID, aPath);
|
||||
if (NS_FAILED(rv)) {
|
||||
#ifdef DEBUG
|
||||
printf("nsTextImportModule: unable to unregister %s component => %x\n",
|
||||
cp->mDescription, rv);
|
||||
#endif
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTextImportModule::CanUnload(nsIComponentManager *aCompMgr, PRBool *okToUnload)
|
||||
{
|
||||
if (!okToUnload) {
|
||||
return NS_ERROR_INVALID_POINTER;
|
||||
}
|
||||
*okToUnload = PR_FALSE;
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
static nsTextImportModule *gModule = nsnull;
|
||||
|
||||
extern "C" NS_EXPORT nsresult NSGetModule(nsIComponentManager *servMgr,
|
||||
nsIFileSpec* location,
|
||||
nsIModule** return_cobj)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
NS_ASSERTION(return_cobj, "Null argument");
|
||||
NS_ASSERTION(gModule == nsnull, "nsTextImportModule: Module already created.");
|
||||
|
||||
// Create an initialize the layout module instance
|
||||
nsTextImportModule *m = new nsTextImportModule();
|
||||
if (!m) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
// Increase refcnt and store away nsIModule interface to m in return_cobj
|
||||
rv = m->QueryInterface(nsIModule::GetIID(), (void**)return_cobj);
|
||||
if (NS_FAILED(rv)) {
|
||||
delete m;
|
||||
m = nsnull;
|
||||
}
|
||||
gModule = m; // WARNING: Weak Reference
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,535 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Text import addressbook interfaces
|
||||
|
||||
*/
|
||||
#include "nscore.h"
|
||||
#include "nsCRT.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIImportService.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsTextImport.h"
|
||||
#include "nsIAllocator.h"
|
||||
#include "nsIImportGeneric.h"
|
||||
#include "nsIImportAddressBooks.h"
|
||||
#include "nsIImportABDescriptor.h"
|
||||
#include "nsIImportFieldMap.h"
|
||||
#include "nsIOutputStream.h"
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "nsTextFormater.h"
|
||||
#include "nsTextStringBundle.h"
|
||||
#include "nsTextAddress.h"
|
||||
|
||||
|
||||
#include "TextDebugLog.h"
|
||||
|
||||
|
||||
static NS_DEFINE_CID(kImportServiceCID, NS_IMPORTSERVICE_CID);
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kISupportsArrayIID, NS_ISUPPORTSARRAY_IID);
|
||||
|
||||
|
||||
|
||||
class ImportAddressImpl : public nsIImportAddressBooks
|
||||
{
|
||||
public:
|
||||
ImportAddressImpl();
|
||||
virtual ~ImportAddressImpl();
|
||||
|
||||
static nsresult Create(nsIImportAddressBooks** aImport);
|
||||
|
||||
// nsISupports interface
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
// nsIImportAddressBooks interface
|
||||
|
||||
/* PRBool GetSupportsMultiple (); */
|
||||
NS_IMETHOD GetSupportsMultiple(PRBool *_retval) { *_retval = PR_FALSE; return( NS_OK);}
|
||||
|
||||
/* PRBool GetAutoFind (out wstring description); */
|
||||
NS_IMETHOD GetAutoFind(PRUnichar **description, PRBool *_retval);
|
||||
|
||||
/* PRBool GetNeedsFieldMap (nsIFileSpec *location); */
|
||||
NS_IMETHOD GetNeedsFieldMap(nsIFileSpec *location, PRBool *_retval);
|
||||
|
||||
/* void GetDefaultLocation (out nsIFileSpec location, out boolean found, out boolean userVerify); */
|
||||
NS_IMETHOD GetDefaultLocation(nsIFileSpec **location, PRBool *found, PRBool *userVerify);
|
||||
|
||||
/* nsISupportsArray FindAddressBooks (in nsIFileSpec location); */
|
||||
NS_IMETHOD FindAddressBooks(nsIFileSpec *location, nsISupportsArray **_retval);
|
||||
|
||||
/* nsISupports InitFieldMap(nsIFileSpec location, nsIImportFieldMap fieldMap); */
|
||||
NS_IMETHOD InitFieldMap(nsIFileSpec *location, nsIImportFieldMap *fieldMap)
|
||||
{ return( NS_OK); }
|
||||
|
||||
/* void ImportAddressBook (in nsIImportABDescriptor source, in nsISupports destination, in nsISupports fieldMap, out boolean fatalError); */
|
||||
NS_IMETHOD ImportAddressBook( nsIImportABDescriptor *source,
|
||||
nsIAddrDatabase * destination,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** errorLog,
|
||||
PRUnichar ** successLog,
|
||||
PRBool * fatalError);
|
||||
|
||||
/* unsigned long GetImportProgress (); */
|
||||
NS_IMETHOD GetImportProgress(PRUint32 *_retval);
|
||||
|
||||
private:
|
||||
static void ReportSuccess( nsString& name, nsString *pStream);
|
||||
static void SetLogs( nsString& success, nsString& error, PRUnichar **pError, PRUnichar **pSuccess);
|
||||
static void ReportError( PRInt32 errorNum, nsString& name, nsString *pStream);
|
||||
|
||||
private:
|
||||
nsTextAddress m_text;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsresult NS_NewTextImport(nsIImportModule** aImport)
|
||||
{
|
||||
NS_PRECONDITION(aImport != nsnull, "null ptr");
|
||||
if (! aImport)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aImport = new nsTextImport();
|
||||
if (! *aImport)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aImport);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
nsTextImport::nsTextImport()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
|
||||
IMPORT_LOG0( "nsTextImport Module Created\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
nsTextImport::~nsTextImport()
|
||||
{
|
||||
|
||||
IMPORT_LOG0( "nsTextImport Module Deleted\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsTextImport, nsIImportModule::GetIID());
|
||||
|
||||
|
||||
NS_IMETHODIMP nsTextImport::GetName( PRUnichar **name)
|
||||
{
|
||||
NS_PRECONDITION(name != nsnull, "null ptr");
|
||||
if (! name)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*name = nsTextStringBundle::GetStringByID( TEXTIMPORT_NAME);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTextImport::GetDescription( PRUnichar **name)
|
||||
{
|
||||
NS_PRECONDITION(name != nsnull, "null ptr");
|
||||
if (! name)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*name = nsTextStringBundle::GetStringByID( TEXTIMPORT_DESCRIPTION);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTextImport::GetSupports( char **supports)
|
||||
{
|
||||
NS_PRECONDITION(supports != nsnull, "null ptr");
|
||||
if (! supports)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*supports = nsCRT::strdup( kTextSupportsString);
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTextImport::GetSupportsUpgrade( PRBool *pUpgrade)
|
||||
{
|
||||
NS_PRECONDITION(pUpgrade != nsnull, "null ptr");
|
||||
if (! pUpgrade)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*pUpgrade = PR_FALSE;
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsTextImport::GetImportInterface( const char *pImportType, nsISupports **ppInterface)
|
||||
{
|
||||
NS_PRECONDITION(pImportType != nsnull, "null ptr");
|
||||
if (! pImportType)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
NS_PRECONDITION(ppInterface != nsnull, "null ptr");
|
||||
if (! ppInterface)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*ppInterface = nsnull;
|
||||
nsresult rv;
|
||||
|
||||
if (!nsCRT::strcmp( pImportType, "addressbook")) {
|
||||
// create the nsIImportMail interface and return it!
|
||||
nsIImportAddressBooks * pAddress = nsnull;
|
||||
nsIImportGeneric * pGeneric = nsnull;
|
||||
rv = ImportAddressImpl::Create( &pAddress);
|
||||
if (NS_SUCCEEDED( rv)) {
|
||||
NS_WITH_SERVICE( nsIImportService, impSvc, kImportServiceCID, &rv);
|
||||
if (NS_SUCCEEDED( rv)) {
|
||||
rv = impSvc->CreateNewGenericAddressBooks( &pGeneric);
|
||||
if (NS_SUCCEEDED( rv)) {
|
||||
pGeneric->SetData( "addressInterface", pAddress);
|
||||
rv = pGeneric->QueryInterface( kISupportsIID, (void **)ppInterface);
|
||||
}
|
||||
}
|
||||
}
|
||||
NS_IF_RELEASE( pAddress);
|
||||
NS_IF_RELEASE( pGeneric);
|
||||
return( rv);
|
||||
}
|
||||
|
||||
return( NS_ERROR_NOT_AVAILABLE);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
nsresult ImportAddressImpl::Create(nsIImportAddressBooks** aImport)
|
||||
{
|
||||
NS_PRECONDITION(aImport != nsnull, "null ptr");
|
||||
if (! aImport)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aImport = new ImportAddressImpl();
|
||||
if (! *aImport)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
NS_ADDREF(*aImport);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
ImportAddressImpl::ImportAddressImpl()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
|
||||
ImportAddressImpl::~ImportAddressImpl()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS(ImportAddressImpl, nsIImportAddressBooks::GetIID());
|
||||
|
||||
|
||||
NS_IMETHODIMP ImportAddressImpl::GetAutoFind(PRUnichar **description, PRBool *_retval)
|
||||
{
|
||||
NS_PRECONDITION(description != nsnull, "null ptr");
|
||||
NS_PRECONDITION(_retval != nsnull, "null ptr");
|
||||
if (! description || !_retval)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsString str;
|
||||
*_retval = PR_FALSE;
|
||||
nsTextStringBundle::GetStringByID( TEXTIMPORT_ADDRESS_NAME, str);
|
||||
*description = str.ToNewUnicode();
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP ImportAddressImpl::GetDefaultLocation(nsIFileSpec **ppLoc, PRBool *found, PRBool *userVerify)
|
||||
{
|
||||
NS_PRECONDITION(found != nsnull, "null ptr");
|
||||
NS_PRECONDITION(ppLoc != nsnull, "null ptr");
|
||||
NS_PRECONDITION(userVerify != nsnull, "null ptr");
|
||||
if (! found || !userVerify || !ppLoc)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*ppLoc = nsnull;
|
||||
*found = PR_FALSE;
|
||||
*userVerify = PR_TRUE;
|
||||
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP ImportAddressImpl::FindAddressBooks(nsIFileSpec *pLoc, nsISupportsArray **ppArray)
|
||||
{
|
||||
NS_PRECONDITION(pLoc != nsnull, "null ptr");
|
||||
NS_PRECONDITION(ppArray != nsnull, "null ptr");
|
||||
if (!pLoc || !ppArray)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*ppArray = nsnull;
|
||||
PRBool exists = PR_FALSE;
|
||||
nsresult rv = pLoc->Exists( &exists);
|
||||
if (NS_FAILED( rv) || !exists)
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
PRBool isFile = PR_FALSE;
|
||||
rv = pLoc->IsFile( &isFile);
|
||||
if (NS_FAILED( rv) || !isFile)
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
rv = m_text.DetermineDelim( pLoc);
|
||||
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Error determining delimitter\n");
|
||||
return( rv);
|
||||
}
|
||||
|
||||
|
||||
/* Build an address book descriptor based on the file passed in! */
|
||||
nsCOMPtr<nsISupportsArray> array;
|
||||
rv = NS_NewISupportsArray( getter_AddRefs( array));
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "FAILED to allocate the nsISupportsArray\n");
|
||||
return( rv);
|
||||
}
|
||||
|
||||
NS_WITH_SERVICE( nsIImportService, impSvc, kImportServiceCID, &rv);
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Failed to obtain the import service\n");
|
||||
return( rv);
|
||||
}
|
||||
|
||||
char *pName = nsnull;
|
||||
rv = pLoc->GetLeafName( &pName);
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Failed getting leaf name of file\n");
|
||||
return( rv);
|
||||
}
|
||||
nsString name = pName;
|
||||
PRInt32 idx = name.RFindChar( '.');
|
||||
if ((idx != -1) && (idx > 0) && ((name.Length() - idx - 1) < 5)) {
|
||||
nsString t;
|
||||
name.Left( t, idx);
|
||||
name = t;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIImportABDescriptor> desc;
|
||||
nsISupports * pInterface;
|
||||
|
||||
rv = impSvc->CreateNewABDescriptor( getter_AddRefs( desc));
|
||||
if (NS_SUCCEEDED( rv)) {
|
||||
PRUint32 sz = 0;
|
||||
pLoc->GetFileSize( &sz);
|
||||
desc->SetPreferredName( name.GetUnicode());
|
||||
desc->SetSize( sz);
|
||||
nsIFileSpec *pSpec = nsnull;
|
||||
desc->GetFileSpec( &pSpec);
|
||||
if (pSpec) {
|
||||
pSpec->FromFileSpec( pLoc);
|
||||
NS_RELEASE( pSpec);
|
||||
}
|
||||
rv = desc->QueryInterface( kISupportsIID, (void **) &pInterface);
|
||||
array->AppendElement( pInterface);
|
||||
pInterface->Release();
|
||||
}
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Error creating address book descriptor for text import\n");
|
||||
}
|
||||
else {
|
||||
rv = array->QueryInterface( kISupportsArrayIID, (void **) ppArray);
|
||||
}
|
||||
|
||||
return( rv);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ImportAddressImpl::ReportSuccess( nsString& name, nsString *pStream)
|
||||
{
|
||||
if (!pStream)
|
||||
return;
|
||||
// load the success string
|
||||
PRUnichar *pText = nsTextStringBundle::GetStringByID( TEXTIMPORT_ADDRESS_SUCCESS);
|
||||
pStream->Append( pText);
|
||||
nsTextStringBundle::FreeString( pText);
|
||||
pStream->Append( NS_LINEBREAK);
|
||||
}
|
||||
|
||||
void ImportAddressImpl::ReportError( PRInt32 errorNum, nsString& name, nsString *pStream)
|
||||
{
|
||||
if (!pStream)
|
||||
return;
|
||||
// load the error string
|
||||
PRUnichar *pFmt = nsTextStringBundle::GetStringByID( errorNum);
|
||||
PRUnichar *pText = nsTextFormater::smprintf( pFmt, name.GetUnicode());
|
||||
pStream->Append( pText);
|
||||
nsTextFormater::smprintf_free( pText);
|
||||
nsTextStringBundle::FreeString( pFmt);
|
||||
pStream->Append( NS_LINEBREAK);
|
||||
}
|
||||
|
||||
void ImportAddressImpl::SetLogs( nsString& success, nsString& error, PRUnichar **pError, PRUnichar **pSuccess)
|
||||
{
|
||||
if (pError)
|
||||
*pError = error.ToNewUnicode();
|
||||
if (pSuccess)
|
||||
*pSuccess = success.ToNewUnicode();
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP ImportAddressImpl::ImportAddressBook( nsIImportABDescriptor *pSource,
|
||||
nsIAddrDatabase * pDestination,
|
||||
nsIImportFieldMap * fieldMap,
|
||||
PRUnichar ** pErrorLog,
|
||||
PRUnichar ** pSuccessLog,
|
||||
PRBool * fatalError)
|
||||
{
|
||||
NS_PRECONDITION(pSource != nsnull, "null ptr");
|
||||
NS_PRECONDITION(pDestination != nsnull, "null ptr");
|
||||
NS_PRECONDITION(fatalError != nsnull, "null ptr");
|
||||
|
||||
nsString success;
|
||||
nsString error;
|
||||
if (!pSource || !pDestination || !fatalError) {
|
||||
IMPORT_LOG0( "*** Bad param passed to text address import\n");
|
||||
nsTextStringBundle::GetStringByID( TEXTIMPORT_ADDRESS_BADPARAM, error);
|
||||
if (fatalError)
|
||||
*fatalError = PR_TRUE;
|
||||
SetLogs( success, error, pErrorLog, pSuccessLog);
|
||||
return( NS_ERROR_NULL_POINTER);
|
||||
}
|
||||
|
||||
PRBool abort = PR_FALSE;
|
||||
nsString name;
|
||||
PRUnichar * pName;
|
||||
if (NS_SUCCEEDED( pSource->GetPreferredName( &pName))) {
|
||||
name = pName;
|
||||
nsCRT::free( pName);
|
||||
}
|
||||
|
||||
PRUint32 addressSize = 0;
|
||||
pSource->GetSize( &addressSize);
|
||||
if (addressSize == 0) {
|
||||
IMPORT_LOG0( "Address book size is 0, skipping import.\n");
|
||||
ReportSuccess( name, &success);
|
||||
SetLogs( success, error, pErrorLog, pSuccessLog);
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
nsIFileSpec * inFile;
|
||||
if (NS_FAILED( pSource->GetFileSpec( &inFile))) {
|
||||
ReportError( TEXTIMPORT_ADDRESS_BADSOURCEFILE, name, &error);
|
||||
SetLogs( success, error, pErrorLog, pSuccessLog);
|
||||
return( NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
#ifdef IMPORT_DEBUG
|
||||
char *pPath;
|
||||
inFile->GetNativePath( &pPath);
|
||||
IMPORT_LOG1( "Import address book: %s\n", pPath);
|
||||
nsCRT::free( pPath);
|
||||
#endif
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
PRBool isLDIF = PR_FALSE;
|
||||
rv = nsTextAddress::IsLDIFFile( inFile, &isLDIF);
|
||||
if (NS_FAILED( rv)) {
|
||||
inFile->Release();
|
||||
ReportError( TEXTIMPORT_ADDRESS_CONVERTERROR, name, &error);
|
||||
SetLogs( success, error, pErrorLog, pSuccessLog);
|
||||
return( rv);
|
||||
}
|
||||
|
||||
if (isLDIF) {
|
||||
// This get's tricky, the database really requires the thing
|
||||
// to have an .ldi extension so if it doesn't we may need to
|
||||
// copy the file to a temp file with the correct name, then
|
||||
// import it!
|
||||
rv = m_text.ImportLDIF( &abort, name.GetUnicode(), inFile, pDestination, error);
|
||||
}
|
||||
else {
|
||||
rv = m_text.ImportAddresses( &abort, name.GetUnicode(), inFile, pDestination, fieldMap, error);
|
||||
}
|
||||
|
||||
inFile->Release();
|
||||
|
||||
|
||||
if (NS_SUCCEEDED( rv) && error.IsEmpty()) {
|
||||
ReportSuccess( name, &success);
|
||||
}
|
||||
else {
|
||||
ReportError( TEXTIMPORT_ADDRESS_CONVERTERROR, name, &error);
|
||||
}
|
||||
|
||||
SetLogs( success, error, pErrorLog, pSuccessLog);
|
||||
|
||||
IMPORT_LOG0( "*** Text address import done\n");
|
||||
|
||||
return( rv);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP ImportAddressImpl::GetImportProgress(PRUint32 *_retval)
|
||||
{
|
||||
return( NS_OK);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP ImportAddressImpl::GetNeedsFieldMap(nsIFileSpec *location, PRBool *_retval)
|
||||
{
|
||||
NS_PRECONDITION(_retval != nsnull, "null ptr");
|
||||
NS_PRECONDITION(location != nsnull, "null ptr");
|
||||
if (!location || !_retval)
|
||||
return( NS_ERROR_NULL_POINTER);
|
||||
|
||||
*_retval = PR_TRUE;
|
||||
PRBool exists = PR_FALSE;
|
||||
PRBool isFile = PR_FALSE;
|
||||
|
||||
nsresult rv = location->Exists( &exists);
|
||||
rv = location->IsFile( &isFile);
|
||||
|
||||
if (!exists || !isFile)
|
||||
return( NS_ERROR_FAILURE);
|
||||
|
||||
PRBool isLDIF = PR_FALSE;
|
||||
rv = nsTextAddress::IsLDIFFile( location, &isLDIF);
|
||||
if (NS_FAILED( rv)) {
|
||||
IMPORT_LOG0( "*** Error determining if file is of type LDIF\n");
|
||||
return( rv);
|
||||
}
|
||||
|
||||
if (isLDIF)
|
||||
*_retval = PR_FALSE;
|
||||
|
||||
return( NS_OK);
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsTextImport_h___
|
||||
#define nsTextImport_h___
|
||||
|
||||
#include "nsIImportModule.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
|
||||
#define NS_TEXTIMPORT_CID \
|
||||
{ /* A5991D01-ADA7-11d3-A9C2-00A0CC26DA63 */ \
|
||||
0xa5991d01, 0xada7, 0x11d3, \
|
||||
{0xa9, 0xc2, 0x0, 0xa0, 0xcc, 0x26, 0xda, 0x63 }}
|
||||
|
||||
|
||||
|
||||
#define kTextSupportsString NS_IMPORT_ADDRESS_STR
|
||||
|
||||
class nsTextImport : public nsIImportModule
|
||||
{
|
||||
public:
|
||||
|
||||
nsTextImport();
|
||||
virtual ~nsTextImport();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// we suppport the nsIImportModule interface
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
NS_DECL_NSIIMPORTMODULE
|
||||
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
extern nsresult NS_NewTextImport(nsIImportModule** aImport);
|
||||
|
||||
|
||||
#endif /* nsTextImport_h___ */
|
|
@ -0,0 +1,82 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "prprf.h"
|
||||
#include "prmem.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "nsTextStringBundle.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIURI.h"
|
||||
|
||||
/* This is the next generation string retrieval call */
|
||||
static NS_DEFINE_CID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
|
||||
|
||||
#define TEXT_MSGS_URL "chrome://messenger/locale/textImportMsgs.properties"
|
||||
|
||||
nsIStringBundle *nsTextStringBundle::GetStringBundle( void)
|
||||
{
|
||||
nsresult rv;
|
||||
char* propertyURL = TEXT_MSGS_URL;
|
||||
nsIStringBundle* sBundle = nsnull;
|
||||
|
||||
|
||||
NS_WITH_SERVICE(nsIStringBundleService, sBundleService, kStringBundleServiceCID, &rv);
|
||||
if (NS_SUCCEEDED(rv) && (nsnull != sBundleService)) {
|
||||
nsILocale * locale = nsnull;
|
||||
rv = sBundleService->CreateBundle(propertyURL, locale, &sBundle);
|
||||
}
|
||||
|
||||
return( sBundle);
|
||||
}
|
||||
|
||||
void nsTextStringBundle::GetStringByID( PRInt32 stringID, nsString& result, nsIStringBundle *pBundle)
|
||||
{
|
||||
|
||||
PRUnichar *ptrv = GetStringByID( stringID, pBundle);
|
||||
result = ptrv;
|
||||
FreeString( ptrv);
|
||||
}
|
||||
|
||||
PRUnichar *nsTextStringBundle::GetStringByID(PRInt32 stringID, nsIStringBundle *pBundle)
|
||||
{
|
||||
PRBool mine = PR_FALSE;
|
||||
if (!pBundle) {
|
||||
mine = PR_TRUE;
|
||||
pBundle = GetStringBundle();
|
||||
}
|
||||
|
||||
if (pBundle) {
|
||||
PRUnichar *ptrv = nsnull;
|
||||
nsresult rv = pBundle->GetStringFromID(stringID, &ptrv);
|
||||
|
||||
if (mine) {
|
||||
NS_RELEASE(pBundle);
|
||||
}
|
||||
|
||||
if (NS_SUCCEEDED( rv) && ptrv)
|
||||
return( ptrv);
|
||||
}
|
||||
|
||||
nsString resultString( "[StringID ");
|
||||
resultString.Append(stringID, 10);
|
||||
resultString += "?]";
|
||||
|
||||
return( resultString.ToNewUnicode());
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsTextStringBundle_H__
|
||||
#define nsTextStringBundle_H__
|
||||
|
||||
#include "nsCRT.h"
|
||||
#include "nsString.h"
|
||||
|
||||
class nsIStringBundle;
|
||||
|
||||
class nsTextStringBundle {
|
||||
public:
|
||||
static PRUnichar * GetStringByID(PRInt32 stringID, nsIStringBundle *pBundle = nsnull);
|
||||
static void GetStringByID(PRInt32 stringID, nsString& result, nsIStringBundle *pBundle = nsnull);
|
||||
// GetStringBundle creates a new one every time!
|
||||
static nsIStringBundle * GetStringBundle( void);
|
||||
static void FreeString( PRUnichar *pStr) { nsCRT::free( pStr);}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define TEXTIMPORT_NAME 2000
|
||||
#define TEXTIMPORT_DESCRIPTION 2001
|
||||
#define TEXTIMPORT_ADDRESS_NAME 2002
|
||||
#define TEXTIMPORT_ADDRESS_SUCCESS 2003
|
||||
#define TEXTIMPORT_ADDRESS_BADPARAM 2004
|
||||
#define TEXTIMPORT_ADDRESS_BADSOURCEFILE 2005
|
||||
#define TEXTIMPORT_ADDRESS_CONVERTERROR 2006
|
||||
|
||||
|
||||
|
||||
#endif /* nsTextStringBundle_H__ */
|
|
@ -78,10 +78,213 @@
|
|||
## @loc None
|
||||
2010=Unable to create an account to import mail into
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC_START
|
||||
## @loc None
|
||||
2100=First Name
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2101=Last Name
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2102=Display Name
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2103=Nickname
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2104=Primary Email
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2105=Secondary Email
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2106=Work Phone
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2107=Home Phone
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2108=Fax Number
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2109=Pager Number
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2110=Cellular Number
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2111=Home Address
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2112=Home Address 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2113=Home City
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2114=Home State
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2115=Home ZipCode
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2116=Home Country
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2117=Work Address
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2118=Work Address 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2119=Work City
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2120=Work State
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2121=Work ZipCode
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2122=Work Country
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2123=Job Title
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2124=Department
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2125=Company
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2126=Web Page 1
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2127=Web Page 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2128=Birth Year
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2129=Birth Month
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2130=Birth Day
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2131=Custom 1
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2132=Custom 2
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2133=Custom 3
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC
|
||||
## @loc None
|
||||
2134=Custom 4
|
||||
|
||||
# Description: Address book field name
|
||||
## @name IMPORT_FIELD_DESC_END
|
||||
## @loc None
|
||||
2135=Notes
|
||||
|
||||
|
||||
# Description: Strings for the import dialog
|
||||
ImportMailDialogTitle=Import Mail
|
||||
ImportAddressBooksDialogTitle=Import Address Books
|
||||
ImportSettingsDialogTitle=Import Settings
|
||||
|
||||
ImportMailListLabel=Select application to import mail from:
|
||||
ImportAddressBooksListLabel=Select address book format:
|
||||
ImportSettingsListLabel=Select application to import settings from:
|
||||
|
||||
#Error strings
|
||||
ImportAlreadyInProgress=An import operation is currently in progress, try again when the current import has finished.
|
||||
|
||||
#Error strings for settings import
|
||||
ImportSettingsBadModule=Unable to load settings module
|
||||
ImportSettingsNotFound=Unable to find settings. Check to make sure the application is installed on this machine.
|
||||
ImportSettingsFailed=An error occurred while importing settings. Some, or all, of the settings may not have been imported.
|
||||
ImportSettingsSuccess=Settings were imported from
|
||||
|
||||
#Error string for mail import
|
||||
ImportMailBadModule=Unable to load mail import module
|
||||
ImportMailNotFound=Unable to find mail to import. Check to make sure the mail application is correctly installed on this machine.
|
||||
ImportMailFailed=An error occurred importing mail from
|
||||
ImportMailSuccess=Mail was successfully imported from
|
||||
|
||||
#Error string for address import
|
||||
ImportAddressBadModule=Unable to load address book import module
|
||||
ImportAddressNotFound=Unable to find any address books to import. Check to make sure the selected application or format is correctly installed on this machine.
|
||||
ImportAddressFailed=An error occurred importing addresses from
|
||||
ImportAddressSuccess=Addresses were successfully imported from
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
|
||||
#
|
||||
# The following are used by the outlook express import code to display status/error
|
||||
# and informational messages
|
||||
#
|
||||
|
||||
# Short name of import module
|
||||
## @name TEXTIMPORT_NAME
|
||||
## @loc None
|
||||
2000=Text
|
||||
|
||||
# Description of import module
|
||||
## @name TEXTIMPORT_DESCRIPTION
|
||||
## @loc None
|
||||
2001=Address books in text format, comma or tab delimitted
|
||||
|
||||
# Description of import module
|
||||
## @name TEXTIMPORT_ADDRESS_NAME
|
||||
## @loc None
|
||||
2002=Text Address Book
|
||||
|
||||
# Description
|
||||
## @name TEXTIMPORT_ADDRESS_SUCCESS
|
||||
## @loc None
|
||||
2003=Imported address book %S
|
||||
|
||||
# Error message
|
||||
## @name TEXTIMPORT_ADDRESS_BADPARAM
|
||||
## @loc None
|
||||
2004=Bad parameter passed to import address book.
|
||||
|
||||
# Error message
|
||||
## @name TEXTIMPORT_ADDRESS_BADSOURCEFILE
|
||||
## @loc None
|
||||
2005=Error accessing file for address book %S.
|
||||
|
||||
# Error message
|
||||
## @name TEXTIMPORT_ADDRESS_CONVERTERROR
|
||||
## @loc None
|
||||
2006=Error importing address book %S, all addresses may not have been imported.
|
||||
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче