зеркало из https://github.com/mozilla/gecko-dev.git
Edit Mailing list backend and fix for mailing list add, delete problem
This commit is contained in:
Родитель
115137c0f8
Коммит
dacc2ecc05
|
@ -44,7 +44,7 @@ interface nsIAbDirectory : nsISupports {
|
|||
readonly attribute nsIEnumerator childCards;
|
||||
nsIAbCard addChildCards(in string uriName);
|
||||
nsIAbDirectory addDirectory(in string uriName);
|
||||
void deleteDirectories(in nsISupportsArray dierctories);
|
||||
void deleteDirectory(in nsIAbDirectory dierctory);
|
||||
void deleteCards(in nsISupportsArray cards);
|
||||
boolean hasCard(in nsIAbCard cards);
|
||||
boolean hasDirectory(in nsIAbDirectory dir);
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "xulstubs.idl"
|
||||
#include "nsIRDFCompositeDataSource.idl"
|
||||
#include "nsIAddrDatabase.idl"
|
||||
#include "nsISupportsArray.idl"
|
||||
|
||||
|
||||
%{C++
|
||||
|
@ -39,7 +40,7 @@ interface nsIAddressBook : nsISupports {
|
|||
|
||||
void deleteCards(in nsIDOMXULElement tree, in nsIDOMXULElement srcDir, in nsIDOMNodeList node);
|
||||
void newAddressBook(in nsIRDFCompositeDataSource db, in nsIDOMXULElement srcDir, in wstring name);
|
||||
void deleteAddressBooks(in nsIRDFCompositeDataSource db, in nsIDOMXULElement srcDir, in nsIDOMNodeList node);
|
||||
void deleteAddressBooks(in nsIRDFCompositeDataSource db, in nsISupportsArray parentDir, in nsIDOMNodeList node);
|
||||
void printCard();
|
||||
void printAddressbook();
|
||||
void setWebShellWindow(in nsIDOMWindow win);
|
||||
|
|
|
@ -62,6 +62,15 @@ nsAbDirProperty::nsAbDirProperty(void)
|
|||
nsAbDirProperty::~nsAbDirProperty(void)
|
||||
{
|
||||
PR_FREEIF(m_DbPath);
|
||||
if (m_AddressList)
|
||||
{
|
||||
PRUint32 count;
|
||||
nsresult rv = m_AddressList->Count(&count);
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "Count failed");
|
||||
PRInt32 i;
|
||||
for (i = count - 1; i >= 0; i--)
|
||||
m_AddressList->RemoveElementAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsAbDirProperty)
|
||||
|
@ -180,7 +189,7 @@ nsAbDirProperty::AddDirectory(const char *uriName, nsIAbDirectory **childDir)
|
|||
{ return NS_OK; }
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAbDirProperty::DeleteDirectories(nsISupportsArray *dierctories)
|
||||
nsAbDirProperty::DeleteDirectory(nsIAbDirectory *dierctory)
|
||||
{ return NS_OK; }
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -302,6 +311,7 @@ NS_IMETHODIMP nsAbDirProperty::AddAddressToList(nsIAbCard *card)
|
|||
if (!m_AddressList)
|
||||
NS_NewISupportsArray(getter_AddRefs(m_AddressList));
|
||||
m_AddressList->AppendElement(card);
|
||||
NS_IF_ADDREF(card);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -325,13 +335,10 @@ NS_IMETHODIMP nsAbDirProperty::AddMailListToDatabase(const char *uri)
|
|||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
nsCOMPtr<nsIRDFResource> parentResource;
|
||||
char *parentUri = PR_smprintf("%s", kDirectoryDataSourceRoot);
|
||||
rv = rdfService->GetResource(parentUri, getter_AddRefs(parentResource));
|
||||
rv = rdfService->GetResource(uri, getter_AddRefs(parentResource));
|
||||
nsCOMPtr<nsIAbDirectory> parentDir = do_QueryInterface(parentResource);
|
||||
if (!parentDir)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
if (parentUri)
|
||||
PR_smprintf_free(parentUri);
|
||||
|
||||
char *listUri = PR_smprintf("%s/MailList%ld", uri, m_dbRowID);
|
||||
if (listUri)
|
||||
|
|
|
@ -153,7 +153,7 @@ NS_IMETHODIMP nsAbDirectory::OnListEntryChange
|
|||
nsCOMPtr<nsIRDFResource> res;
|
||||
rv = rdf->GetResource(listURI, getter_AddRefs(res));
|
||||
if(listURI)
|
||||
PR_smprintf_free(listURI);
|
||||
nsAllocator::Free(listURI);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIAbDirectory> listDir = do_QueryInterface(res);
|
||||
|
@ -341,6 +341,11 @@ NS_IMETHODIMP nsAbDirectory::CreateNewDirectory(const PRUnichar *dirName, const
|
|||
char *uri = PR_smprintf("%s%s", kDirectoryDataSourceRoot, server->fileName);
|
||||
if (uri)
|
||||
{
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
NS_WITH_SERVICE(nsIAddressBook, addresBook, kAddrBookCID, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = addresBook->GetAbDatabaseFromURI(uri, getter_AddRefs(database));
|
||||
|
||||
rv = AddDirectory(uri, getter_AddRefs(newDir));
|
||||
PR_smprintf_free(uri);
|
||||
if (NS_SUCCEEDED(rv) && newDir)
|
||||
|
@ -440,6 +445,29 @@ NS_IMETHODIMP nsAbDirectory::DeleteCards(nsISupportsArray *cards)
|
|||
else
|
||||
{
|
||||
mDatabase->DeleteCard(card, PR_TRUE);
|
||||
PRBool bIsMailList = PR_FALSE;
|
||||
card->GetIsMailList(&bIsMailList);
|
||||
if (bIsMailList)
|
||||
{
|
||||
//to do, get mailing list dir side uri and notify rdf to remove it
|
||||
PRUint32 rowID;
|
||||
card->GetDbRowID(&rowID);
|
||||
char *listUri = PR_smprintf("%s/MailList%ld", mURI, rowID);
|
||||
if (listUri)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIRDFService, rdfService, kRDFServiceCID, &rv);
|
||||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
nsCOMPtr<nsIRDFResource> listResource;
|
||||
rv = rdfService->GetResource(listUri, getter_AddRefs(listResource));
|
||||
nsCOMPtr<nsIAbDirectory> listDir = do_QueryInterface(listResource);
|
||||
if (listDir)
|
||||
NotifyItemDeleted(listDir);
|
||||
PR_smprintf_free(listUri);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -450,6 +478,11 @@ NS_IMETHODIMP nsAbDirectory::DeleteCards(nsISupportsArray *cards)
|
|||
|
||||
nsresult nsAbDirectory::DeleteDirectoryCards(nsIAbDirectory* directory, DIR_Server *server)
|
||||
{
|
||||
if (!server->fileName) // file name does not exist
|
||||
return NS_OK;
|
||||
if (PL_strlen(server->fileName) == 0) // file name does not exist
|
||||
return NS_OK;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsFileSpec* dbPath = nsnull;
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
|
@ -518,55 +551,45 @@ nsresult nsAbDirectory::DeleteDirectoryCards(nsIAbDirectory* directory, DIR_Serv
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbDirectory::DeleteDirectories(nsISupportsArray *dierctories)
|
||||
NS_IMETHODIMP nsAbDirectory::DeleteDirectory(nsIAbDirectory *directory)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
PRUint32 i, dirCount;
|
||||
rv = dierctories->Count(&dirCount);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
for (i = 0; i < dirCount; i++)
|
||||
if (directory)
|
||||
{
|
||||
nsCOMPtr<nsISupports> dirSupports;
|
||||
nsCOMPtr<nsIAbDirectory> directory;
|
||||
dirSupports = getter_AddRefs(dierctories->ElementAt(i));
|
||||
directory = do_QueryInterface(dirSupports, &rv);
|
||||
if (NS_SUCCEEDED(rv) && directory)
|
||||
{
|
||||
DIR_Server *server = nsnull;
|
||||
rv = directory->GetServer(&server);
|
||||
if (server)
|
||||
{ //it's an address book
|
||||
DeleteDirectoryCards(directory, server);
|
||||
DIR_Server *server = nsnull;
|
||||
rv = directory->GetServer(&server);
|
||||
if (server)
|
||||
{ //it's an address book
|
||||
DeleteDirectoryCards(directory, server);
|
||||
|
||||
DIR_DeleteServerFromList(server);
|
||||
DIR_DeleteServerFromList(server);
|
||||
|
||||
rv = mSubDirectories->RemoveElement(directory);
|
||||
NotifyItemDeleted(directory);
|
||||
}
|
||||
else
|
||||
{ //it's a mailing list
|
||||
nsresult rv = NS_OK;
|
||||
rv = mSubDirectories->RemoveElement(directory);
|
||||
NotifyItemDeleted(directory);
|
||||
}
|
||||
else
|
||||
{ //it's a mailing list
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
char *uri;
|
||||
rv = directory->GetDirUri(&uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
char *uri;
|
||||
rv = directory->GetDirUri(&uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
NS_WITH_SERVICE(nsIAddressBook, addresBook, kAddrBookCID, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = addresBook->GetAbDatabaseFromURI(uri, getter_AddRefs(database));
|
||||
nsAllocator::Free(uri);
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> database;
|
||||
NS_WITH_SERVICE(nsIAddressBook, addresBook, kAddrBookCID, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = addresBook->GetAbDatabaseFromURI(uri, getter_AddRefs(database));
|
||||
nsAllocator::Free(uri);
|
||||
rv = database->DeleteMailList(directory, PR_TRUE);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
rv = database->DeleteMailList(directory, PR_TRUE);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
database->Commit(kLargeCommit);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
database->Commit(kLargeCommit);
|
||||
|
||||
NotifyItemDeleted(directory);
|
||||
}
|
||||
NotifyItemDeleted(directory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
NS_IMETHOD GetChildCards(nsIEnumerator* *result);
|
||||
NS_IMETHOD AddChildCards(const char *uriName, nsIAbCard **childCard);
|
||||
NS_IMETHOD AddDirectory(const char *uriName, nsIAbDirectory **childDir);
|
||||
NS_IMETHOD DeleteDirectories(nsISupportsArray *directories);
|
||||
NS_IMETHOD DeleteDirectory(nsIAbDirectory *directory);
|
||||
NS_IMETHOD DeleteCards(nsISupportsArray *cards);
|
||||
NS_IMETHOD HasCard(nsIAbCard *cards, PRBool *hasCard);
|
||||
NS_IMETHOD HasDirectory(nsIAbDirectory *dir, PRBool *hasDir);
|
||||
|
|
|
@ -1642,6 +1642,11 @@ nsresult nsAddrDatabase::AddListCardColumnsToRow(nsIAbCard *pCard, nsIMdbRow *pL
|
|||
AddPrimaryEmail(pCardRow, pUTF8Email);
|
||||
err = m_mdbPabTable->AddRow(GetEnv(), pCardRow);
|
||||
}
|
||||
|
||||
//notify RDF a new card row
|
||||
nsCOMPtr<nsIAbCard> newCard;
|
||||
CreateABCard(pCardRow, getter_AddRefs(newCard));
|
||||
NotifyCardEntryChange(AB_NotifyInserted, newCard, NULL);
|
||||
}
|
||||
PR_FREEIF(pUTF8Email);
|
||||
|
||||
|
@ -1797,6 +1802,11 @@ NS_IMETHODIMP nsAddrDatabase::CreateMailListAndAddToDB(nsIAbDirectory *newList,
|
|||
AddListAttributeColumnsToRow(newList, listRow);
|
||||
AddRecordKeyColumnToRow(listRow);
|
||||
err = m_mdbPabTable->AddRow(GetEnv(), listRow);
|
||||
|
||||
nsCOMPtr<nsIAbCard> listCard;
|
||||
CreateABListCard(listRow, getter_AddRefs(listCard));
|
||||
NotifyCardEntryChange(AB_NotifyInserted, listCard, NULL);
|
||||
|
||||
listRow->CutStrongRef(GetEnv());
|
||||
}
|
||||
if (NS_FAILED(err)) return err;
|
||||
|
@ -3200,6 +3210,27 @@ nsresult nsAddrDatabase::GetListFromDB(nsIAbDirectory *newList, nsIMdbRow* listR
|
|||
PR_Free(unicodeStr);
|
||||
}
|
||||
|
||||
PRUint32 totalAddress = GetListAddressTotal(listRow);
|
||||
PRUint32 pos;
|
||||
for (pos = 1; pos <= totalAddress; pos++)
|
||||
{
|
||||
mdb_token listAddressColumnToken;
|
||||
mdb_id rowID;
|
||||
|
||||
char columnStr[16];
|
||||
sprintf(columnStr, kMailListAddressFormat, pos);
|
||||
GetStore()->StringToToken(GetEnv(), columnStr, &listAddressColumnToken);
|
||||
|
||||
nsIMdbRow* cardRow;
|
||||
err = GetIntColumn(listRow, listAddressColumnToken, (PRUint32*)&rowID, 0);
|
||||
err = GetCardRowByRowID(rowID, &cardRow);
|
||||
|
||||
nsCOMPtr<nsIAbCard> card;
|
||||
err = CreateABCard(cardRow, getter_AddRefs(card));
|
||||
newList->AddAddressToList(card);
|
||||
// NS_IF_ADDREF(card);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -161,7 +161,7 @@ NS_IMETHODIMP nsAddressBook::DeleteCards
|
|||
|
||||
dirArray->AppendElement(resource);
|
||||
|
||||
rv = DoCommand(database, NC_RDF_DELETE, dirArray, resourceArray);
|
||||
rv = DoCommand(database, NC_RDF_DELETECARD, dirArray, resourceArray);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -202,14 +202,14 @@ NS_IMETHODIMP nsAddressBook::NewAddressBook
|
|||
rdfService->GetLiteral(nameStr.GetUnicode(), getter_AddRefs(nameLiteral));
|
||||
nameArray->AppendElement(nameLiteral);
|
||||
|
||||
DoCommand(db, "http://home.netscape.com/NC-rdf#NewDirectory", dirArray, nameArray);
|
||||
DoCommand(db, NC_RDF_NEWDIRECTORY, dirArray, nameArray);
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAddressBook::DeleteAddressBooks
|
||||
(nsIRDFCompositeDataSource* db, nsIDOMXULElement *srcDirectory, nsIDOMNodeList *nodeList)
|
||||
(nsIRDFCompositeDataSource* db, nsISupportsArray *parentDir, nsIDOMNodeList *nodeList)
|
||||
{
|
||||
if(!db || !srcDirectory || !nodeList)
|
||||
if(!db || !parentDir || !nodeList)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
@ -217,31 +217,12 @@ NS_IMETHODIMP nsAddressBook::DeleteAddressBooks
|
|||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCOMPtr<nsISupportsArray> dirArray;
|
||||
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(dirArray));
|
||||
if(NS_FAILED(rv))
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
nsCOMPtr<nsIRDFResource> parentResource;
|
||||
char *parentUri = PR_smprintf("%s", kDirectoryDataSourceRoot);
|
||||
rv = rdfService->GetResource(parentUri, getter_AddRefs(parentResource));
|
||||
nsCOMPtr<nsIAbDirectory> parentDir = do_QueryInterface(parentResource);
|
||||
if (!parentDir)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
if (parentUri)
|
||||
PR_smprintf_free(parentUri);
|
||||
|
||||
dirArray->AppendElement(parentResource);
|
||||
|
||||
|
||||
nsCOMPtr<nsISupportsArray> resourceArray;
|
||||
|
||||
rv = ConvertDOMListToResourceArray(nodeList, getter_AddRefs(resourceArray));
|
||||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
DoCommand(db, NC_RDF_DELETE, dirArray, resourceArray);
|
||||
DoCommand(db, NC_RDF_DELETE, parentDir, resourceArray);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
|
||||
#define NC_RDF_NEWABCARD "http://home.netscape.com/NC-rdf#NewCard"
|
||||
#define NC_RDF_DELETE "http://home.netscape.com/NC-rdf#Delete"
|
||||
#define NC_RDF_DELETECARD "http://home.netscape.com/NC-rdf#DeleteCards"
|
||||
#define NC_RDF_NEWDIRECTORY "http://home.netscape.com/NC-rdf#NewDirectory"
|
||||
|
||||
class nsAddressBook : public nsIAddressBook, public nsICmdLineHandler
|
||||
|
|
|
@ -61,6 +61,7 @@ nsIRDFResource* nsAbDirectoryDataSource::kNC_DirUri = nsnull;
|
|||
|
||||
// commands
|
||||
nsIRDFResource* nsAbDirectoryDataSource::kNC_Delete = nsnull;
|
||||
nsIRDFResource* nsAbDirectoryDataSource::kNC_DeleteCards = nsnull;
|
||||
nsIRDFResource* nsAbDirectoryDataSource::kNC_NewDirectory = nsnull;
|
||||
|
||||
#define NC_RDF_CHILD "http://home.netscape.com/NC-rdf#child"
|
||||
|
@ -70,6 +71,7 @@ nsIRDFResource* nsAbDirectoryDataSource::kNC_NewDirectory = nsnull;
|
|||
|
||||
//Directory Commands
|
||||
#define NC_RDF_DELETE "http://home.netscape.com/NC-rdf#Delete"
|
||||
#define NC_RDF_DELETECARDS "http://home.netscape.com/NC-rdf#DeleteCards"
|
||||
#define NC_RDF_NEWDIRECTORY "http://home.netscape.com/NC-rdf#NewDirectory"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
@ -102,6 +104,7 @@ nsAbDirectoryDataSource::~nsAbDirectoryDataSource (void)
|
|||
NS_RELEASE2(kNC_DirUri, refcnt);
|
||||
|
||||
NS_RELEASE2(kNC_Delete, refcnt);
|
||||
NS_RELEASE2(kNC_DeleteCards, refcnt);
|
||||
NS_RELEASE2(kNC_NewDirectory, refcnt);
|
||||
|
||||
/* free all directories */
|
||||
|
@ -133,6 +136,7 @@ nsAbDirectoryDataSource::Init()
|
|||
mRDFService->GetResource(NC_RDF_DIRURI, &kNC_DirUri);
|
||||
|
||||
mRDFService->GetResource(NC_RDF_DELETE, &kNC_Delete);
|
||||
mRDFService->GetResource(NC_RDF_DELETECARDS, &kNC_DeleteCards);
|
||||
mRDFService->GetResource(NC_RDF_NEWDIRECTORY, &kNC_NewDirectory);
|
||||
}
|
||||
|
||||
|
@ -341,6 +345,7 @@ nsAbDirectoryDataSource::GetAllCommands(nsIRDFResource* source,
|
|||
rv = NS_NewISupportsArray(getter_AddRefs(cmds));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
cmds->AppendElement(kNC_Delete);
|
||||
cmds->AppendElement(kNC_DeleteCards);
|
||||
cmds->AppendElement(kNC_NewDirectory);
|
||||
}
|
||||
|
||||
|
@ -365,7 +370,7 @@ nsAbDirectoryDataSource::IsCommandEnabled(nsISupportsArray/*<nsIRDFResource>*/*
|
|||
directory = do_QueryInterface(source, &rv);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
// we don't care about the arguments -- directory commands are always enabled
|
||||
if (!((aCommand == kNC_Delete) ||
|
||||
if (!((aCommand == kNC_Delete) || (aCommand == kNC_DeleteCards) ||
|
||||
(aCommand == kNC_NewDirectory))) {
|
||||
*aResult = PR_FALSE;
|
||||
return NS_OK;
|
||||
|
@ -385,14 +390,17 @@ nsAbDirectoryDataSource::DoCommand(nsISupportsArray/*<nsIRDFResource>*/* aSource
|
|||
nsresult rv = aSources->Count(&cnt);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if ((aCommand == kNC_Delete))
|
||||
rv = DoDeleteFromDirectory(aSources, aArguments);
|
||||
|
||||
for (i = 0; i < cnt; i++)
|
||||
{
|
||||
nsCOMPtr<nsISupports> supports = getter_AddRefs(aSources->ElementAt(i));
|
||||
nsCOMPtr<nsIAbDirectory> directory = do_QueryInterface(supports, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
if ((aCommand == kNC_Delete))
|
||||
rv = DoDeleteFromDirectory(directory, aArguments);
|
||||
if ((aCommand == kNC_DeleteCards))
|
||||
rv = DoDeleteCardsFromDirectory(directory, aArguments);
|
||||
else if((aCommand == kNC_NewDirectory))
|
||||
rv = DoNewDirectory(directory, aArguments);
|
||||
}
|
||||
|
@ -565,16 +573,41 @@ nsAbDirectoryDataSource::createDirectoryChildNode(nsIAbDirectory *directory,
|
|||
return NS_RDF_NO_VALUE;
|
||||
}
|
||||
|
||||
nsresult nsAbDirectoryDataSource::DoDeleteFromDirectory(nsIAbDirectory *directory, nsISupportsArray *arguments)
|
||||
nsresult nsAbDirectoryDataSource::DoDeleteFromDirectory(nsISupportsArray *parentDirs, nsISupportsArray *delDirs)
|
||||
{
|
||||
PRUint32 item, itemCount;
|
||||
nsresult rv = parentDirs->Count(&itemCount);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsISupportsArray> dirArray;
|
||||
NS_NewISupportsArray(getter_AddRefs(dirArray));
|
||||
|
||||
for (item = 0; item < itemCount; item++)
|
||||
{
|
||||
nsCOMPtr<nsISupports> supports = getter_AddRefs(parentDirs->ElementAt(item));
|
||||
nsCOMPtr<nsIAbDirectory> parent = do_QueryInterface(supports, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsISupports> supports = getter_AddRefs(delDirs->ElementAt(item));
|
||||
nsCOMPtr<nsIAbDirectory> deletedDir(do_QueryInterface(supports));
|
||||
if(deletedDir)
|
||||
{
|
||||
rv = parent->DeleteDirectory(deletedDir);
|
||||
}
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsAbDirectoryDataSource::DoDeleteCardsFromDirectory(nsIAbDirectory *directory, nsISupportsArray *arguments)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
PRUint32 itemCount;
|
||||
rv = arguments->Count(&itemCount);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsISupportsArray> cardArray, dirArray;
|
||||
nsCOMPtr<nsISupportsArray> cardArray;
|
||||
NS_NewISupportsArray(getter_AddRefs(cardArray));
|
||||
NS_NewISupportsArray(getter_AddRefs(dirArray));
|
||||
|
||||
//Split up deleted items into different type arrays to be passed to the folder
|
||||
//for deletion.
|
||||
|
@ -583,31 +616,19 @@ nsresult nsAbDirectoryDataSource::DoDeleteFromDirectory(nsIAbDirectory *director
|
|||
{
|
||||
nsCOMPtr<nsISupports> supports = getter_AddRefs(arguments->ElementAt(item));
|
||||
nsCOMPtr<nsIAbCard> deletedCard(do_QueryInterface(supports));
|
||||
nsCOMPtr<nsIAbDirectory> deletedDir(do_QueryInterface(supports));
|
||||
if (deletedCard)
|
||||
{
|
||||
cardArray->AppendElement(supports);
|
||||
}
|
||||
else if(deletedDir)
|
||||
{
|
||||
dirArray->AppendElement(supports);
|
||||
}
|
||||
}
|
||||
PRUint32 cnt;
|
||||
rv = cardArray->Count(&cnt);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (cnt > 0)
|
||||
rv = directory->DeleteCards(cardArray);
|
||||
|
||||
rv = dirArray->Count(&cnt);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (cnt > 0)
|
||||
rv = directory->DeleteDirectories(dirArray);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
nsresult nsAbDirectoryDataSource::DoNewDirectory(nsIAbDirectory *directory, nsISupportsArray *arguments)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
|
|
@ -102,8 +102,10 @@ protected:
|
|||
static nsresult getDirectoryArcLabelsOut(nsIAbDirectory *directory,
|
||||
nsISupportsArray **arcs);
|
||||
|
||||
nsresult DoDeleteFromDirectory(nsIAbDirectory *directory,
|
||||
nsISupportsArray *arguments);
|
||||
nsresult DoDeleteFromDirectory(nsISupportsArray *parentDirs,
|
||||
nsISupportsArray *delDirs);
|
||||
nsresult DoDeleteCardsFromDirectory(nsIAbDirectory *directory,
|
||||
nsISupportsArray *delDirs);
|
||||
|
||||
nsresult DoDirectoryAssert(nsIAbDirectory *directory,
|
||||
nsIRDFResource *property, nsIRDFNode *target);
|
||||
|
@ -121,6 +123,7 @@ protected:
|
|||
|
||||
// commands
|
||||
static nsIRDFResource* kNC_Delete;
|
||||
static nsIRDFResource* kNC_DeleteCards;
|
||||
static nsIRDFResource* kNC_NewDirectory;
|
||||
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче