Relanding Bug 394781 now the regressions should be fixed (An address database (nsIAddrDatabase) should be got from the directory not from the address book service via uri). r=bienvenu,sr=mscott
git-svn-id: svn://10.0.0.236/trunk@235444 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
0e7bb557f7
commit
8617c22925
@ -289,7 +289,7 @@ function AbEditSelectedDirectory()
|
||||
var directory = GetDirectoryFromURI(selecteduri);
|
||||
if (directory.isMailList) {
|
||||
var dirUri = GetParentDirectoryFromMailingListURI(selecteduri);
|
||||
goEditListDialog(dirUri, null, selecteduri, UpdateCardView);
|
||||
goEditListDialog(null, selecteduri, UpdateCardView);
|
||||
}
|
||||
else {
|
||||
if (directory instanceof Components.interfaces.nsIAbLDAPDirectory) {
|
||||
@ -437,7 +437,7 @@ function AbEditCard(card)
|
||||
return;
|
||||
|
||||
if (card.isMailList) {
|
||||
goEditListDialog(GetSelectedDirectory(), card, card.mailListURI, UpdateCardView);
|
||||
goEditListDialog(card, card.mailListURI, UpdateCardView);
|
||||
}
|
||||
else {
|
||||
goEditCardDialog(GetSelectedDirectory(), card, UpdateCardView);
|
||||
@ -843,12 +843,12 @@ function goNewListDialog(selectedAB)
|
||||
{selectedAB:selectedAB});
|
||||
}
|
||||
|
||||
function goEditListDialog(abURI, abCard, listURI, okCallback)
|
||||
function goEditListDialog(abCard, listURI, okCallback)
|
||||
{
|
||||
window.openDialog("chrome://messenger/content/addressbook/abEditListDialog.xul",
|
||||
"",
|
||||
"chrome,resizable=no,titlebar,modal,centerscreen",
|
||||
{abURI:abURI, abCard:abCard, listURI:listURI, okCallback:okCallback});
|
||||
{abCard:abCard, listURI:listURI, okCallback:okCallback});
|
||||
}
|
||||
|
||||
function goNewCardDialog(selectedAB)
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
#define kABFileName_CurrentSuffix ".mab" /* v3 address book extension */
|
||||
%}
|
||||
|
||||
[scriptable, uuid(2c6bf966-88fb-4054-85ee-967ef4750e94)]
|
||||
[scriptable, uuid(0e4fe001-a62f-41fe-bddb-5ccd8b2911a0)]
|
||||
interface nsIAbDirectory : nsISupports {
|
||||
|
||||
// Types of operation
|
||||
@ -180,20 +180,27 @@ interface nsIAbDirectory : nsISupports {
|
||||
|
||||
// Specific to a directory which stores mail lists
|
||||
|
||||
// Creates a new mailing list in the directory
|
||||
// with the properties defined by list
|
||||
void addMailList (in nsIAbDirectory list);
|
||||
/**
|
||||
* Creates a new mailing list in the directory. Currently only supported
|
||||
* for top-level directories.
|
||||
*
|
||||
* @param list The new mailing list to add.
|
||||
*/
|
||||
void addMailList(in nsIAbDirectory list);
|
||||
|
||||
// Specific to a directory which is a mail list
|
||||
attribute wstring listNickName;
|
||||
attribute wstring description;
|
||||
|
||||
/**
|
||||
* Edits an existing mailing list (specified as listCard)
|
||||
* into the directory specified by the uri
|
||||
* XXX javadoc me
|
||||
* Edits an existing mailing list (specified as listCard) into its parent
|
||||
* directory. You should call this function on the resource with the same
|
||||
* uri as the listCard.
|
||||
*
|
||||
* @param listCard A nsIAbCard version of the mailing list with the new
|
||||
* values.
|
||||
*/
|
||||
void editMailListToDatabase(in string uri, in nsIAbCard listCard);
|
||||
void editMailListToDatabase(in nsIAbCard listCard);
|
||||
|
||||
// Copies mail list properties from the srcList
|
||||
void copyMailList(in nsIAbDirectory srcList);
|
||||
|
||||
@ -39,6 +39,8 @@
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface nsIMutableArray;
|
||||
interface nsILocalFile;
|
||||
interface nsIAddrDatabase;
|
||||
interface nsIAbLDAPAttributeMap;
|
||||
interface nsILDAPURL;
|
||||
|
||||
@ -51,7 +53,7 @@ interface nsILDAPURL;
|
||||
* XXX This should really inherit from nsIAbDirectory, and some day it will.
|
||||
* But for now, doing that complicates implementation.
|
||||
*/
|
||||
[scriptable, uuid(fb4adf7f-a299-49d1-ac47-9ce181e8e80d)]
|
||||
[scriptable, uuid(684c8f3e-dcd1-4f16-9cfc-f0f77080a249)]
|
||||
interface nsIAbLDAPDirectory : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -103,5 +105,15 @@ interface nsIAbLDAPDirectory : nsISupports
|
||||
* directories rdf uri, e.g. moz-abldapdirectory://<pref base name>/.
|
||||
*/
|
||||
attribute nsILDAPURL lDAPURL;
|
||||
|
||||
/**
|
||||
* The replication (offline) file that this database uses.
|
||||
*/
|
||||
readonly attribute nsILocalFile replicationFile;
|
||||
|
||||
/**
|
||||
* A database that is set up for the replication file.
|
||||
*/
|
||||
readonly attribute nsIAddrDatabase replicationDatabase;
|
||||
};
|
||||
|
||||
|
||||
@ -38,15 +38,17 @@
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
#include "nsIAbCard.idl"
|
||||
#include "nsIAbDirectory.idl"
|
||||
interface nsILocalFile;
|
||||
interface nsIAbDirectory;
|
||||
interface nsIAbCard;
|
||||
interface nsIAddrDatabase;
|
||||
|
||||
%{C++
|
||||
#define kMDBDirectoryRoot "moz-abmdbdirectory://"
|
||||
#define kMDBDirectoryRootLen 21
|
||||
%}
|
||||
|
||||
[scriptable, uuid(db732ce9-a030-4aba-b4e5-96314ba5ec36)]
|
||||
[scriptable, uuid(6f25d820-f708-49b8-8a41-7332b856a197)]
|
||||
interface nsIAbMDBDirectory : nsISupports {
|
||||
|
||||
// Creates an RDF directory component from the
|
||||
@ -57,6 +59,19 @@ interface nsIAbMDBDirectory : nsISupports {
|
||||
// This just returns the uri on the RDF resource
|
||||
string getDirUri();
|
||||
|
||||
/**
|
||||
* Supplies a nsILocalFile point to the database file for this directory
|
||||
*
|
||||
* @exception NS_ERROR_NOT_INITIALIZED If there is no filename preference
|
||||
* present or it is empty
|
||||
*/
|
||||
readonly attribute nsILocalFile databaseFile;
|
||||
|
||||
/**
|
||||
* Supplies a nsIAddrDatabase that uses the databaseFile. See also
|
||||
* databaseFile for possible exceptions.
|
||||
*/
|
||||
readonly attribute nsIAddrDatabase database;
|
||||
|
||||
// Mail list specific
|
||||
//
|
||||
|
||||
@ -36,15 +36,15 @@
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIRDFCompositeDataSource.idl"
|
||||
#include "nsIAddrDatabase.idl"
|
||||
#include "nsISupportsArray.idl"
|
||||
|
||||
interface nsIDOMWindow;
|
||||
interface nsIAbDirectory;
|
||||
interface nsIAbCard;
|
||||
interface nsIAbDirectoryProperties;
|
||||
interface nsISupportsArray;
|
||||
interface nsIRDFDataSource;
|
||||
|
||||
[scriptable, uuid(8b1bdc86-c6bd-4df0-8123-8b30c3e3ae43)]
|
||||
[scriptable, uuid(70ed1e50-4824-443f-aaea-c0efb7f2ec1a)]
|
||||
interface nsIAddressBook : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -63,7 +63,6 @@ interface nsIAddressBook : nsISupports
|
||||
void deleteAddressBooks(in nsIRDFDataSource aDS, in nsISupportsArray aParentDir, in nsISupportsArray aResourceArray);
|
||||
|
||||
void exportAddressBook(in nsIDOMWindow aParentWin, in nsIAbDirectory aDirectory);
|
||||
nsIAddrDatabase getAbDatabaseFromURI(in string URI);
|
||||
boolean mailListNameExists(in wstring name);
|
||||
nsIAbCard escapedVCardToAbCard(in string escapedVCardStr);
|
||||
string abCardToEscapedVCard(in nsIAbCard aCard);
|
||||
|
||||
@ -283,8 +283,7 @@ function AbEditSelectedDirectory()
|
||||
var selecteduri = GetSelectedDirectory();
|
||||
var directory = GetDirectoryFromURI(selecteduri);
|
||||
if (directory.isMailList) {
|
||||
var dirUri = GetParentDirectoryFromMailingListURI(selecteduri);
|
||||
goEditListDialog(dirUri, null, selecteduri, UpdateCardView);
|
||||
goEditListDialog(null, selecteduri, UpdateCardView);
|
||||
}
|
||||
else {
|
||||
if (directory instanceof Components.interfaces.nsIAbLDAPDirectory) {
|
||||
@ -414,7 +413,7 @@ function AbEditCard(card)
|
||||
return;
|
||||
|
||||
if (card.isMailList) {
|
||||
goEditListDialog(GetSelectedDirectory(), card, card.mailListURI, UpdateCardView);
|
||||
goEditListDialog(card, card.mailListURI, UpdateCardView);
|
||||
}
|
||||
else {
|
||||
goEditCardDialog(GetSelectedDirectory(), card, UpdateCardView);
|
||||
@ -826,12 +825,12 @@ function goNewListDialog(selectedAB)
|
||||
{selectedAB:selectedAB});
|
||||
}
|
||||
|
||||
function goEditListDialog(abURI, abCard, listURI, okCallback)
|
||||
function goEditListDialog(abCard, listURI, okCallback)
|
||||
{
|
||||
window.openDialog("chrome://messenger/content/addressbook/abEditListDialog.xul",
|
||||
"",
|
||||
"chrome,resizable=no,titlebar,modal,centerscreen",
|
||||
{abURI:abURI, abCard:abCard, listURI:listURI, okCallback:okCallback});
|
||||
{abCard:abCard, listURI:listURI, okCallback:okCallback});
|
||||
}
|
||||
|
||||
function goNewCardDialog(selectedAB)
|
||||
|
||||
@ -38,7 +38,6 @@
|
||||
top.MAX_RECIPIENTS = 1;
|
||||
var inputElementType = "";
|
||||
|
||||
var gParentURI;
|
||||
var gListCard;
|
||||
var gEditList;
|
||||
var gOkCallback = null;
|
||||
@ -263,7 +262,7 @@ function EditListOKButton()
|
||||
gListCard.notes = gEditList.description;
|
||||
}
|
||||
|
||||
gEditList.editMailListToDatabase(gParentURI, gListCard);
|
||||
gEditList.editMailListToDatabase(gListCard);
|
||||
|
||||
if (gOkCallback)
|
||||
gOkCallback();
|
||||
@ -277,7 +276,6 @@ function OnLoadEditList()
|
||||
{
|
||||
InitCommonJS();
|
||||
|
||||
gParentURI = window.arguments[0].abURI;
|
||||
gListCard = window.arguments[0].abCard;
|
||||
var listUri = window.arguments[0].listURI;
|
||||
gOkCallback = window.arguments[0].okCallback;
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
#include "nsString.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "prmem.h"
|
||||
#include "nsIAddressBook.h"
|
||||
#include "nsIAbMDBDirectory.h"
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsAbAddressCollecter, nsIAbAddressCollecter, nsIObserver)
|
||||
|
||||
@ -352,22 +352,21 @@ nsresult nsAbAddressCollecter::SetAbURI(const nsACString &aURI)
|
||||
m_abURI = aURI;
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIAddrBookSession> abSession = do_GetService(NS_ADDRBOOKSESSION_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = addressBook->GetAbDatabaseFromURI(m_abURI.get(), getter_AddRefs(m_database));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIRDFService> rdfService = do_GetService("@mozilla.org/rdf/rdf-service;1", &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr <nsIRDFResource> resource;
|
||||
nsCOMPtr<nsIRDFResource> resource;
|
||||
rv = rdfService->GetResource(m_abURI, getter_AddRefs(resource));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
m_directory = do_QueryInterface(resource, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAbMDBDirectory> mdbDir(do_QueryInterface(m_directory, &rv));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = mdbDir->GetDatabase(getter_AddRefs(m_database));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
#include "nsIIOService.h"
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
#include "nsAbMDBDirectory.h"
|
||||
#include "nsIAbMDBDirectory.h"
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsAbAutoCompleteSession, nsIAbAutoCompleteSession, nsIAutoCompleteSession)
|
||||
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
#include "nsIAbDirectory.h"
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "plbase64.h"
|
||||
#include "nsIAddrBookSession.h"
|
||||
#include "nsIStringBundle.h"
|
||||
|
||||
@ -297,7 +297,7 @@ nsAbDirProperty::CreateDirectoryByURI(const nsAString &aDisplayName,
|
||||
NS_IMETHODIMP nsAbDirProperty::AddMailList(nsIAbDirectory *list)
|
||||
{ return NS_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
NS_IMETHODIMP nsAbDirProperty::EditMailListToDatabase(const char *uri, nsIAbCard *listCard)
|
||||
NS_IMETHODIMP nsAbDirProperty::EditMailListToDatabase(nsIAbCard *listCard)
|
||||
{ return NS_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
NS_IMETHODIMP nsAbDirProperty::AddCard(nsIAbCard *childCard, nsIAbCard **addedCard)
|
||||
|
||||
@ -57,6 +57,9 @@
|
||||
#include "nsIAbMDBDirectory.h"
|
||||
#include "nsILDAPURL.h"
|
||||
#include "nsILDAPConnection.h"
|
||||
#include "nsAppDirectoryServiceDefs.h"
|
||||
#include "nsDirectoryServiceUtils.h"
|
||||
#include "nsILocalFile.h"
|
||||
|
||||
#define kDefaultMaxHits 100
|
||||
|
||||
@ -569,3 +572,47 @@ NS_IMETHODIMP nsAbLDAPDirectory::GetAttributeMap(nsIAbLDAPAttributeMap **aAttrib
|
||||
|
||||
return mapSvc->GetMapForPrefBranch(m_DirPrefId, aAttributeMap);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPDirectory::GetReplicationFile(nsILocalFile **aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
nsCString fileName;
|
||||
nsresult rv = GetStringValue("filename", EmptyCString(), fileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (fileName.IsEmpty())
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIFile> profileDir;
|
||||
rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
|
||||
getter_AddRefs(profileDir));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = profileDir->AppendNative(fileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsILocalFile> replFile(do_QueryInterface(profileDir, &rv));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
NS_ADDREF(*aResult = replFile);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPDirectory::GetReplicationDatabase(nsIAddrDatabase **aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsILocalFile> databaseFile;
|
||||
rv = GetReplicationFile(getter_AddRefs(databaseFile));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> addrDBFactory =
|
||||
do_GetService(NS_ADDRDATABASE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return addrDBFactory->Open(databaseFile, PR_FALSE /* no create */, PR_TRUE,
|
||||
aResult);
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@
|
||||
#include "nsIAddressBook.h"
|
||||
#include "nsIAddrBookSession.h"
|
||||
#include "nsIAddrDBListener.h"
|
||||
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "nsEnumeratorUtils.h"
|
||||
|
||||
#include "nsAbBaseCID.h"
|
||||
|
||||
@ -182,3 +182,13 @@ NS_IMETHODIMP nsAbMDBDirProperty::CardForEmailAddress(const char * aEmailAddress
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbMDBDirProperty::GetDatabaseFile(nsILocalFile **aResult)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbMDBDirProperty::GetDatabase(nsIAddrDatabase **aResult)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
@ -48,7 +48,6 @@
|
||||
#include "nsIAbMDBCard.h"
|
||||
#include "nsIAbListener.h"
|
||||
#include "nsIAddrBookSession.h"
|
||||
#include "nsIAddressBook.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsNetCID.h"
|
||||
#include "nsAbDirectoryQuery.h"
|
||||
@ -60,6 +59,9 @@
|
||||
#include "mdb.h"
|
||||
#include "prprf.h"
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsAppDirectoryServiceDefs.h"
|
||||
#include "nsDirectoryServiceUtils.h"
|
||||
#include "nsILocalFile.h"
|
||||
|
||||
// XXX todo
|
||||
// fix this -1,0,1 crap, use an enum or #define
|
||||
@ -91,8 +93,10 @@ NS_IMETHODIMP nsAbMDBDirectory::Init(const char *aUri)
|
||||
nsCAutoString uri;
|
||||
uri = aUri;
|
||||
|
||||
mIsMailingList = (uri.Find("MailList") == kNotFound) ? 0 : 1;
|
||||
|
||||
// Mailing lists don't have their own prefs.
|
||||
if (m_DirPrefId.IsEmpty() && (uri.Find("MailList") == kNotFound))
|
||||
if (m_DirPrefId.IsEmpty() && !mIsMailingList)
|
||||
{
|
||||
// Find the first ? (of the search params) if there is one.
|
||||
// We know we can start at the end of the moz-abmdbdirectory:// because
|
||||
@ -227,29 +231,20 @@ NS_IMETHODIMP nsAbMDBDirectory::DeleteDirectory(nsIAbDirectory *directory)
|
||||
nsCOMPtr<nsIAbMDBDirectory> dbdirectory(do_QueryInterface(directory, &rv));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCString uri;
|
||||
rv = dbdirectory->GetDirUri(getter_Copies(uri));
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
rv = dbdirectory->GetDatabase(getter_AddRefs(database));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
rv = database->DeleteMailList(directory, PR_TRUE);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = addressBook->GetAbDatabaseFromURI(uri.get(), getter_AddRefs(database));
|
||||
database->Commit(nsAddrDBCommitType::kLargeCommit);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = database->DeleteMailList(directory, PR_TRUE);
|
||||
if (m_AddressList)
|
||||
m_AddressList->RemoveElement(directory);
|
||||
rv = mSubDirectories.RemoveObject(directory);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
database->Commit(nsAddrDBCommitType::kLargeCommit);
|
||||
|
||||
if (m_AddressList)
|
||||
m_AddressList->RemoveElement(directory);
|
||||
rv = mSubDirectories.RemoveObject(directory);
|
||||
|
||||
NotifyItemDeleted(directory);
|
||||
}
|
||||
|
||||
NotifyItemDeleted(directory);
|
||||
|
||||
return rv;
|
||||
}
|
||||
@ -372,7 +367,7 @@ NS_IMETHODIMP nsAbMDBDirectory::AddDirectory(const char *uriName, nsIAbDirectory
|
||||
|
||||
NS_IMETHODIMP nsAbMDBDirectory::GetDirUri(char **uri)
|
||||
{
|
||||
NS_ASSERTION(uri, "Null out param");
|
||||
NS_ENSURE_ARG_POINTER(uri);
|
||||
NS_ASSERTION(!mURI.IsEmpty(), "Not initialized?");
|
||||
|
||||
*uri = ToNewCString(mURI);
|
||||
@ -383,7 +378,49 @@ NS_IMETHODIMP nsAbMDBDirectory::GetDirUri(char **uri)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbMDBDirectory::GetDatabaseFile(nsILocalFile **aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
nsCString fileName;
|
||||
nsresult rv = GetStringValue("filename", EmptyCString(), fileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (fileName.IsEmpty())
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIFile> profileDir;
|
||||
rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
|
||||
getter_AddRefs(profileDir));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = profileDir->AppendNative(fileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsILocalFile> dbFile = do_QueryInterface(profileDir, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
NS_ADDREF(*aResult = dbFile);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbMDBDirectory::GetDatabase(nsIAddrDatabase **aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsILocalFile> databaseFile;
|
||||
rv = GetDatabaseFile(getter_AddRefs(databaseFile));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> addrDBFactory =
|
||||
do_GetService(NS_ADDRDATABASE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return addrDBFactory->Open(databaseFile, PR_FALSE /* no create */, PR_TRUE,
|
||||
aResult);
|
||||
}
|
||||
|
||||
// nsIAbDirectory methods
|
||||
|
||||
@ -477,11 +514,8 @@ NS_IMETHODIMP nsAbMDBDirectory::DeleteCards(nsISupportsArray *cards)
|
||||
// before we do the delete, make this directory (which represents the search)
|
||||
// a listener on the database, so that it will get notified when the cards are deleted
|
||||
// after delete, remove this query as a listener.
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
rv = addressBook->GetAbDatabaseFromURI(mURINoQuery.get(), getter_AddRefs(database));
|
||||
rv = GetDatabase(getter_AddRefs(database));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
rv = database->AddListener(this);
|
||||
@ -640,20 +674,11 @@ NS_IMETHODIMP nsAbMDBDirectory::HasDirectory(nsIAbDirectory *dir, PRBool *hasDir
|
||||
dir->GetIsMailList(&bIsMailingList);
|
||||
if (bIsMailingList)
|
||||
{
|
||||
nsCString uri;
|
||||
rv = dbdir->GetDirUri(getter_Copies(uri));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
rv = dbdir->GetDatabase(getter_AddRefs(database));
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = addressBook->GetAbDatabaseFromURI(uri.get(), getter_AddRefs(database));
|
||||
}
|
||||
if(NS_SUCCEEDED(rv) && database)
|
||||
{
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = database->ContainsMailList(dir, hasDir);
|
||||
}
|
||||
rv = database->ContainsMailList(dir, hasDir);
|
||||
}
|
||||
|
||||
return rv;
|
||||
@ -842,30 +867,21 @@ NS_IMETHODIMP nsAbMDBDirectory::DropCard(nsIAbCard* aCard, PRBool needToCopyCard
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbMDBDirectory::EditMailListToDatabase(const char *uri, nsIAbCard *listCard)
|
||||
NS_IMETHODIMP nsAbMDBDirectory::EditMailListToDatabase(nsIAbCard *listCard)
|
||||
{
|
||||
if (mIsQueryURI)
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
if (!mIsMailingList)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> listDatabase;
|
||||
nsresult rv = GetAbDatabase();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = addressBook->GetAbDatabaseFromURI(uri, getter_AddRefs(listDatabase));
|
||||
mDatabase->EditMailList(this, listCard, PR_TRUE);
|
||||
mDatabase->Commit(nsAddrDBCommitType::kLargeCommit);
|
||||
|
||||
if (listDatabase)
|
||||
{
|
||||
listDatabase->EditMailList(this, listCard, PR_TRUE);
|
||||
listDatabase->Commit(nsAddrDBCommitType::kLargeCommit);
|
||||
listDatabase = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
|
||||
}
|
||||
else
|
||||
return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// nsIAddrDBListener methods
|
||||
@ -897,7 +913,7 @@ NS_IMETHODIMP nsAbMDBDirectory::OnCardEntryChange
|
||||
break;
|
||||
}
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -1020,16 +1036,43 @@ nsresult nsAbMDBDirectory::GetAbDatabase()
|
||||
{
|
||||
NS_ASSERTION(!mURI.IsEmpty(), "Not initialized?");
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
if (mDatabase)
|
||||
return NS_OK;
|
||||
|
||||
if (!mDatabase) {
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
nsresult rv;
|
||||
|
||||
rv = addressBook->GetAbDatabaseFromURI(mURI.get(), getter_AddRefs(mDatabase));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = mDatabase->AddListener(this);
|
||||
if (mIsMailingList)
|
||||
{
|
||||
// Get the database of the parent directory.
|
||||
nsCString parentURI(mURINoQuery);
|
||||
|
||||
PRInt32 pos = parentURI.RFindChar('/');
|
||||
|
||||
// If we didn't find a / something really bad has happened
|
||||
if (pos == -1)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
parentURI = StringHead(parentURI, pos);
|
||||
|
||||
nsCOMPtr<nsIRDFService> rdfService =
|
||||
do_GetService("@mozilla.org/rdf/rdf-service;1", &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIRDFResource> resource;
|
||||
rv = rdfService->GetResource(parentURI, getter_AddRefs(resource));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAbMDBDirectory> mdbDir(do_QueryInterface(resource, &rv));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = mdbDir->GetDatabase(getter_AddRefs(mDatabase));
|
||||
}
|
||||
else
|
||||
rv = GetDatabase(getter_AddRefs(mDatabase));
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = mDatabase->AddListener(this);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
@ -85,6 +85,8 @@ public:
|
||||
NS_IMETHOD RemoveEmailAddressAt(PRUint32 aIndex);
|
||||
NS_IMETHOD AddDirectory(const char *uriName, nsIAbDirectory **childDir);
|
||||
NS_IMETHOD GetDirUri(char **uri);
|
||||
NS_IMETHOD GetDatabaseFile(nsILocalFile **aResult);
|
||||
NS_IMETHOD GetDatabase(nsIAddrDatabase **aResult);
|
||||
NS_IMETHOD CardForEmailAddress(const char * aEmailAddress, nsIAbCard ** aAbCard);
|
||||
|
||||
// nsIAbDirectory methods:
|
||||
@ -98,7 +100,7 @@ public:
|
||||
NS_IMETHOD AddCard(nsIAbCard *card, nsIAbCard **addedCard);
|
||||
NS_IMETHOD ModifyCard(nsIAbCard *aModifiedCard);
|
||||
NS_IMETHOD DropCard(nsIAbCard *card, PRBool needToCopyCard);
|
||||
NS_IMETHOD EditMailListToDatabase(const char *uri, nsIAbCard *listCard);
|
||||
NS_IMETHOD EditMailListToDatabase(nsIAbCard *listCard);
|
||||
|
||||
// nsIAbDirectorySearch methods
|
||||
NS_DECL_NSIABDIRECTORYSEARCH
|
||||
|
||||
@ -524,7 +524,7 @@ NS_IMETHODIMP nsAbOutlookDirectory::AddMailList(nsIAbDirectory *aMailList)
|
||||
if (!didCopy) {
|
||||
retCode = newList->CopyMailList(aMailList) ;
|
||||
NS_ENSURE_SUCCESS(retCode, retCode) ;
|
||||
retCode = newList->EditMailListToDatabase(mURINoQuery.get(), nsnull) ;
|
||||
retCode = newList->EditMailListToDatabase(nsnull);
|
||||
NS_ENSURE_SUCCESS(retCode, retCode) ;
|
||||
}
|
||||
m_AddressList->AppendElement(newList) ;
|
||||
@ -532,21 +532,26 @@ NS_IMETHODIMP nsAbOutlookDirectory::AddMailList(nsIAbDirectory *aMailList)
|
||||
return retCode ;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbOutlookDirectory::EditMailListToDatabase(const char *aUri, nsIAbCard *listCard)
|
||||
NS_IMETHODIMP nsAbOutlookDirectory::EditMailListToDatabase(nsIAbCard *listCard)
|
||||
{
|
||||
if (mIsQueryURI) { return NS_ERROR_NOT_IMPLEMENTED ; }
|
||||
nsresult retCode = NS_OK ;
|
||||
nsString name;
|
||||
nsAbWinHelperGuard mapiAddBook (mAbWinType) ;
|
||||
if (mIsQueryURI)
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
|
||||
if (!mapiAddBook->IsOK()) { return NS_ERROR_FAILURE ; }
|
||||
retCode = GetDirName(name);
|
||||
NS_ENSURE_SUCCESS(retCode, retCode) ;
|
||||
if (!mapiAddBook->SetPropertyUString(*mMapiData, PR_DISPLAY_NAME_W, name.get())) {
|
||||
return NS_ERROR_FAILURE ;
|
||||
}
|
||||
retCode = CommitAddressList() ;
|
||||
return retCode ;
|
||||
nsresult rv;
|
||||
nsString name;
|
||||
nsAbWinHelperGuard mapiAddBook(mAbWinType);
|
||||
|
||||
if (!mapiAddBook->IsOK())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
rv = GetDirName(name);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!mapiAddBook->SetPropertyUString(*mMapiData, PR_DISPLAY_NAME_W,
|
||||
name.get()))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return CommitAddressList();
|
||||
}
|
||||
|
||||
struct OutlookTableAttr
|
||||
|
||||
@ -76,7 +76,7 @@ public:
|
||||
NS_IMETHOD ModifyCard(nsIAbCard *aModifiedCard);
|
||||
NS_IMETHOD DropCard(nsIAbCard *aData, PRBool needToCopyCard);
|
||||
NS_IMETHOD AddMailList(nsIAbDirectory *aMailList);
|
||||
NS_IMETHOD EditMailListToDatabase(const char *aUri, nsIAbCard *listCard);
|
||||
NS_IMETHOD EditMailListToDatabase(nsIAbCard *listCard);
|
||||
|
||||
// nsAbDirectoryRDFResource method
|
||||
NS_IMETHOD Init(const char *aUri);
|
||||
|
||||
@ -225,91 +225,19 @@ nsresult nsAddressBook::DoCommand(nsIRDFDataSource* db,
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAddressBook::GetAbDatabaseFromURI(const char *aURI, nsIAddrDatabase **aDB)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aURI);
|
||||
NS_ENSURE_ARG_POINTER(aDB);
|
||||
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIAddrBookSession> abSession =
|
||||
do_GetService(NS_ADDRBOOKSESSION_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr<nsILocalFile> dbPath;
|
||||
rv = abSession->GetUserProfileDirectory(getter_AddRefs(dbPath));
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
/* directory URIs are of the form
|
||||
* moz-abmdbdirectory://foo
|
||||
* mailing list URIs are of the form
|
||||
* moz-abmdbdirectory://foo/bar
|
||||
*
|
||||
* if we are passed a mailing list URI, we want the db for the parent.
|
||||
*/
|
||||
if (strlen(aURI) < kMDBDirectoryRootLen)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
nsCAutoString file(aURI + kMDBDirectoryRootLen);
|
||||
PRInt32 pos = file.Find("/");
|
||||
if (pos != kNotFound)
|
||||
file.SetLength(pos);
|
||||
rv = dbPath->AppendNative(file);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> addrDBFactory =
|
||||
do_GetService(NS_ADDRDATABASE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
/* Don't create otherwise we end up re-opening a deleted address book */
|
||||
/* bug 66410 */
|
||||
rv = addrDBFactory->Open(dbPath, PR_FALSE /* no create */, PR_TRUE, aDB);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsAddressBook::GetAbDatabaseFromFile(char* pDbFile, nsIAddrDatabase **db)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
if (pDbFile)
|
||||
{
|
||||
nsCOMPtr<nsILocalFile> dbPath;
|
||||
|
||||
nsCOMPtr<nsIAddrBookSession> abSession =
|
||||
do_GetService(NS_ADDRBOOKSESSION_CONTRACTID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = abSession->GetUserProfileDirectory(getter_AddRefs(dbPath));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
nsCAutoString file(pDbFile);
|
||||
rv = dbPath->AppendNative(file);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> addrDBFactory =
|
||||
do_GetService(NS_ADDRDATABASE_CONTRACTID, &rv);
|
||||
if (NS_SUCCEEDED(rv) && addrDBFactory)
|
||||
rv = addrDBFactory->Open(dbPath, PR_TRUE, PR_TRUE, getter_AddRefs(database));
|
||||
|
||||
if (NS_SUCCEEDED(rv) && database)
|
||||
{
|
||||
NS_IF_ADDREF(*db = database);
|
||||
}
|
||||
else
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAddressBook::MailListNameExists(const PRUnichar *name, PRBool *exist)
|
||||
{
|
||||
*exist = PR_FALSE;
|
||||
nsVoidArray* pDirectories = DIR_GetDirectories();
|
||||
if (pDirectories)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIRDFService> rdfService = do_GetService (NS_RDF_CONTRACTID "/rdf-service;1", &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIRDFResource> resource;
|
||||
nsCOMPtr<nsIAbMDBDirectory> directory;
|
||||
|
||||
PRInt32 count = pDirectories->Count();
|
||||
/* check: only show personal address book for now */
|
||||
/* not showing 4.x address book unitl we have the converting done */
|
||||
@ -319,15 +247,16 @@ NS_IMETHODIMP nsAddressBook::MailListNameExists(const PRUnichar *name, PRBool *e
|
||||
DIR_Server *server = (DIR_Server *)pDirectories->ElementAt(i);
|
||||
if (server->dirType == PABDirectory)
|
||||
{
|
||||
/* check: this is a 4.x file, remove when conversion is done */
|
||||
PRUint32 fileNameLen = strlen(server->fileName);
|
||||
if ((fileNameLen > kABFileName_PreviousSuffixLen) &&
|
||||
strcmp(server->fileName + fileNameLen - kABFileName_PreviousSuffixLen, kABFileName_PreviousSuffix) == 0)
|
||||
continue;
|
||||
rv = rdfService->GetResource(nsDependentCString(server->uri),
|
||||
getter_AddRefs(resource));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
directory = do_QueryInterface(resource, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
nsresult rv = GetAbDatabaseFromFile(server->fileName, getter_AddRefs(database));
|
||||
if (NS_SUCCEEDED(rv) && database)
|
||||
nsresult rv = directory->GetDatabase(getter_AddRefs(database));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
database->FindMailListbyUnicodeName(name, exist);
|
||||
if (*exist)
|
||||
|
||||
@ -102,7 +102,6 @@ public:
|
||||
protected:
|
||||
nsresult DoCommand(nsIRDFDataSource *db, const nsACString& command,
|
||||
nsISupportsArray *srcArray, nsISupportsArray *arguments);
|
||||
nsresult GetAbDatabaseFromFile(char* pDbFile, nsIAddrDatabase **db);
|
||||
|
||||
private:
|
||||
nsresult ExportDirectoryToDelimitedText(nsIAbDirectory *aDirectory, const char *aDelim, PRUint32 aDelimLen, nsILocalFile *aLocalFile);
|
||||
|
||||
@ -68,6 +68,7 @@
|
||||
#include "nsNetCID.h"
|
||||
#include "nsIFileStreams.h"
|
||||
#include "nsUnicharUtils.h"
|
||||
#include "nsIAbCard.h"
|
||||
//---------------------------------------------------------------------------
|
||||
// nsMsgSearchTerm specifies one criterion, e.g. name contains phil
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@ -46,6 +46,7 @@
|
||||
#include "nsIRDFService.h"
|
||||
#include "nsIRDFResource.h"
|
||||
#include "nsIMsgHeaderParser.h"
|
||||
#include "nsIAbDirectory.h"
|
||||
#include "nsIAbMDBDirectory.h"
|
||||
#include "nsIAbMDBCard.h"
|
||||
#include "nsIAbCard.h"
|
||||
|
||||
@ -65,6 +65,7 @@
|
||||
#include "nsILocaleService.h"
|
||||
#include "nsCollationCID.h"
|
||||
#include "nsAbBaseCID.h"
|
||||
#include "nsIAbCard.h"
|
||||
#include "nsIAbMDBDirectory.h"
|
||||
#include "nsISpamSettings.h"
|
||||
#include "nsIMsgFilterPlugin.h"
|
||||
|
||||
@ -4066,19 +4066,6 @@ nsresult nsMsgCompose::AttachmentPrettyName(const char* scheme, const char* char
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static nsresult OpenAddressBook(const char * dbUri, nsIAddrDatabase** aDatabase)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aDatabase);
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIAddressBook> addressBook = do_GetService(NS_ADDRESSBOOK_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
|
||||
rv = addressBook->GetAbDatabaseFromURI(dbUri, aDatabase);
|
||||
NS_ENSURE_SUCCESS(rv,rv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsMsgCompose::GetABDirectories(const nsACString& dirUri, nsISupportsArray* directoriesArray, PRBool searchSubDirectory)
|
||||
{
|
||||
static PRBool collectedAddressbookFound;
|
||||
@ -4155,7 +4142,8 @@ nsresult nsMsgCompose::GetABDirectories(const nsACString& dirUri, nsISupportsArr
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsMsgCompose::BuildMailListArray(nsIAddrDatabase* database, nsIAbDirectory* parentDir, nsISupportsArray* array)
|
||||
nsresult nsMsgCompose::BuildMailListArray(nsIAbDirectory* parentDir,
|
||||
nsISupportsArray* array)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
@ -4305,6 +4293,7 @@ NS_IMETHODIMP nsMsgCompose::CheckAndPopulateRecipients(PRBool populateMailList,
|
||||
PRBool stillNeedToSearch = PR_TRUE;
|
||||
nsCOMPtr<nsIAddrDatabase> abDataBase;
|
||||
nsCOMPtr<nsIAbDirectory> abDirectory;
|
||||
nsCOMPtr<nsIAbMDBDirectory> mdbDirectory;
|
||||
nsCOMPtr <nsIAbCard> existingCard;
|
||||
nsCOMPtr <nsISupportsArray> mailListAddresses;
|
||||
nsCOMPtr<nsIMsgHeaderParser> parser (do_GetService(NS_MAILNEWS_MIME_HEADER_PARSER_CONTRACTID));
|
||||
@ -4319,7 +4308,7 @@ NS_IMETHODIMP nsMsgCompose::CheckAndPopulateRecipients(PRBool populateMailList,
|
||||
GetABDirectories(NS_LITERAL_CSTRING(kAllDirectoryRoot), addrbookDirArray, PR_TRUE);
|
||||
PRInt32 nbrRecipients;
|
||||
|
||||
PRBool dirtyABDatabase;
|
||||
PRBool dirtyABDatabase = PR_FALSE;
|
||||
PRUint32 nbrAddressbook;
|
||||
addrbookDirArray->Count(&nbrAddressbook);
|
||||
for (k = 0; k < (PRInt32)nbrAddressbook && stillNeedToSearch; k ++)
|
||||
@ -4340,22 +4329,21 @@ NS_IMETHODIMP nsMsgCompose::CheckAndPopulateRecipients(PRBool populateMailList,
|
||||
|
||||
nsCOMPtr<nsIRDFResource> source(do_QueryInterface(abDirectory));
|
||||
|
||||
nsCString uri;
|
||||
rv = source->GetValue(getter_Copies(uri));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
mdbDirectory = do_QueryInterface(abDirectory, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
continue;
|
||||
|
||||
PRBool supportsMailingLists;
|
||||
rv = abDirectory->GetSupportsMailingLists(&supportsMailingLists);
|
||||
if (NS_FAILED(rv) || !supportsMailingLists)
|
||||
continue;
|
||||
|
||||
dirtyABDatabase = PR_FALSE;
|
||||
rv = OpenAddressBook(uri.get(), getter_AddRefs(abDataBase));
|
||||
if (NS_FAILED(rv) || !abDataBase)
|
||||
rv = mdbDirectory->GetDatabase(getter_AddRefs(abDataBase));
|
||||
if (NS_FAILED(rv))
|
||||
continue;
|
||||
|
||||
/* Collect all mailing list defined in this address book */
|
||||
rv = BuildMailListArray(abDataBase, abDirectory, mailListArray);
|
||||
rv = BuildMailListArray(abDirectory, mailListArray);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
|
||||
@ -127,7 +127,8 @@ private:
|
||||
nsresult CreateMessage(const char * originalMsgURI, MSG_ComposeType type, nsIMsgCompFields* compFields);
|
||||
void CleanUpRecipients(nsString& recipients);
|
||||
nsresult GetABDirectories(const nsACString& dirUri, nsISupportsArray* directoriesArray, PRBool searchSubDirectory);
|
||||
nsresult BuildMailListArray(nsIAddrDatabase* database, nsIAbDirectory* parentDir, nsISupportsArray* array);
|
||||
nsresult BuildMailListArray(nsIAbDirectory* parentDir,
|
||||
nsISupportsArray* array);
|
||||
nsresult GetMailListAddresses(nsString& name, nsISupportsArray* mailListArray, nsISupportsArray** addresses);
|
||||
nsresult TagConvertible(nsIDOMNode *node, PRInt32 *_retval);
|
||||
nsresult _BodyConvertible(nsIDOMNode *node, PRInt32 *_retval);
|
||||
|
||||
@ -68,6 +68,7 @@
|
||||
#include "nsProxiedService.h"
|
||||
#include "msgCore.h"
|
||||
#include "ImportDebug.h"
|
||||
#include "nsIAbMDBDirectory.h"
|
||||
|
||||
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
|
||||
PR_STATIC_CALLBACK( void) ImportAddressThread( void *stuff);
|
||||
@ -741,17 +742,27 @@ void AddressThreadData::DriverAbort()
|
||||
}
|
||||
|
||||
|
||||
nsIAddrDatabase *GetAddressBookFromUri( const char *pUri)
|
||||
nsIAddrDatabase *GetAddressBookFromUri(const char *pUri)
|
||||
{
|
||||
nsIAddrDatabase * pDatabase = nsnull;
|
||||
if (pUri) {
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_PROXIED_SERVICE(nsIAddressBook, addressBook,
|
||||
NS_ADDRESSBOOK_CONTRACTID,
|
||||
NS_PROXY_TO_MAIN_THREAD, &rv);
|
||||
if (addressBook)
|
||||
rv = addressBook->GetAbDatabaseFromURI(pUri, &pDatabase);
|
||||
nsIAddrDatabase * pDatabase = nsnull;
|
||||
if (pUri) {
|
||||
nsresult rv;
|
||||
NS_WITH_PROXIED_SERVICE(nsIRDFService, rdfService,
|
||||
"@mozilla.org/rdf/rdf-service;1",
|
||||
NS_PROXY_TO_MAIN_THREAD, &rv);
|
||||
if (NS_SUCCEEDED(rv) && rdfService)
|
||||
{
|
||||
nsCOMPtr<nsIRDFResource> resource;
|
||||
rv = rdfService->GetResource(nsDependentCString(pUri),
|
||||
getter_AddRefs(resource));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIAbMDBDirectory> directory = do_QueryInterface(resource, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
directory->GetDatabase(&pDatabase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pDatabase;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user