зеркало из https://github.com/mozilla/gecko-dev.git
fix Bug 11399 and add remove address book backend
This commit is contained in:
Родитель
5b65a4e45f
Коммит
74311a9c00
|
@ -34,7 +34,7 @@ interface nsIAddressBook : nsISupports {
|
|||
|
||||
void DeleteCards(in nsIDOMXULElement tree, in nsIDOMXULElement srcDir, in nsIDOMNodeList node);
|
||||
void NewAddressBook(in nsIRDFCompositeDataSource db, in nsIDOMXULElement srcDir, in string name);
|
||||
void DeleteAddressBook(in nsIDOMXULElement tree, in nsIDOMXULElement srcDir, in nsIDOMNodeList node);
|
||||
void DeleteAddressBooks(in nsIRDFCompositeDataSource db, in nsIDOMXULElement srcDir, in nsIDOMNodeList node);
|
||||
void PrintCard();
|
||||
void PrintAddressbook();
|
||||
void SetWebShellWindow(in nsIDOMWindow win);
|
||||
|
|
|
@ -112,6 +112,7 @@ function GetSelectedAddresses()
|
|||
function ChangeDirectoryByDOMNode(dirNode)
|
||||
{
|
||||
var uri = dirNode.getAttribute('id');
|
||||
dump("uri = " + uri + "\n");
|
||||
ChangeDirectoryByURI(uri);
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,18 @@ function AbDelete()
|
|||
}
|
||||
|
||||
|
||||
function AbDeleteDirectory()
|
||||
{
|
||||
dump("\AbDeleteDirectory from XUL\n");
|
||||
var tree = document.getElementById('dirTree');
|
||||
var selArray = tree.getElementsByAttribute('selected', 'true');
|
||||
if ( selArray && selArray.length )
|
||||
{
|
||||
top.addressbook.DeleteAddressBooks(tree.database, tree, selArray);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function UpdateCardView()
|
||||
{
|
||||
var selArray = document.getElementById('resultsTree').getElementsByAttribute('selected', 'true');
|
||||
|
|
|
@ -141,8 +141,6 @@ nsresult nsAbCard::AddSubNode(nsAutoString name, nsIAbCard **childCard)
|
|||
*childCard = card;
|
||||
NS_IF_ADDREF(*childCard);
|
||||
|
||||
(void)nsServiceManager::ReleaseService(kRDFServiceCID, rdf);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -192,8 +192,6 @@ NS_IMETHODIMP nsAbDirectory::AddDirectory(const char *uriName, nsIAbDirectory **
|
|||
*childDir = directory;
|
||||
NS_IF_ADDREF(*childDir);
|
||||
|
||||
(void)nsServiceManager::ReleaseService(kRDFServiceCID, rdf);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
@ -321,30 +319,31 @@ NS_IMETHODIMP nsAbDirectory::DeleteCards(nsISupportsArray *cards)
|
|||
|
||||
NS_IMETHODIMP nsAbDirectory::DeleteDirectories(nsISupportsArray *dierctories)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
/*
|
||||
if (!mDatabase)
|
||||
rv = GetAbDatabase();
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
if (NS_SUCCEEDED(rv) && mDatabase)
|
||||
PRUint32 i, dirCount;
|
||||
rv = dierctories->Count(&dirCount);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
for (i = 0; i < dirCount; i++)
|
||||
{
|
||||
PRUint32 cardCount;
|
||||
rv = cards->Count(&cardCount);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
for(PRUint32 i = 0; i < cardCount; i++)
|
||||
nsCOMPtr<nsISupports> dirSupports;
|
||||
nsCOMPtr<nsIAbDirectory> directory;
|
||||
dirSupports = getter_AddRefs(dierctories->ElementAt(i));
|
||||
directory = do_QueryInterface(dirSupports, &rv);
|
||||
if (NS_SUCCEEDED(rv) && directory)
|
||||
{
|
||||
nsCOMPtr<nsISupports> cardSupports;
|
||||
nsCOMPtr<nsIAbCard> card;
|
||||
cardSupports = getter_AddRefs(cards->ElementAt(i));
|
||||
card = do_QueryInterface(cardSupports, &rv);
|
||||
if (card)
|
||||
DIR_Server *server = nsnull;
|
||||
rv = directory->GetServer(&server);
|
||||
if (server)
|
||||
{
|
||||
mDatabase->DeleteCard(card, PR_TRUE);
|
||||
DIR_DeleteServerFromList(server);
|
||||
|
||||
rv = mSubDirectories->RemoveElement(directory);
|
||||
NotifyItemDeleted(directory);
|
||||
}
|
||||
}
|
||||
mDatabase->Commit(kLargeCommit);
|
||||
}
|
||||
*/
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -76,30 +76,30 @@ NS_IMETHODIMP nsAbRDFResource::OnAnnouncerGoingAway(nsIAddrDBAnnouncer *instigat
|
|||
|
||||
nsresult nsAbRDFResource::GetAbDatabase()
|
||||
{
|
||||
nsresult openAddrDB = NS_OK;
|
||||
nsresult rv = NS_OK;
|
||||
if (!mDatabase && mURI)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
nsFileSpec* dbPath = nsnull;
|
||||
|
||||
NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
abSession->GetUserProfileDirectory(&dbPath);
|
||||
|
||||
|
||||
const char* file = nsnull;
|
||||
file = &(mURI[PL_strlen(kDirectoryDataSourceRoot)]);
|
||||
(*dbPath) += file;
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
NS_WITH_SERVICE(nsIAddrDatabase, addrDBFactory, kAddressBookDBCID, &rv);
|
||||
NS_WITH_SERVICE(nsIAddrDatabase, addrDBFactory, kAddressBookDBCID, &rv);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && addrDBFactory)
|
||||
openAddrDB = addrDBFactory->Open(dbPath, PR_TRUE, getter_AddRefs(mDatabase), PR_TRUE);
|
||||
if (NS_SUCCEEDED(rv) && addrDBFactory)
|
||||
rv = addrDBFactory->Open(dbPath, PR_TRUE, getter_AddRefs(mDatabase), PR_TRUE);
|
||||
|
||||
if (mDatabase)
|
||||
mDatabase->AddListener(this);
|
||||
}
|
||||
if (mDatabase)
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
if (!mDatabase)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -154,8 +154,6 @@ NS_IMETHODIMP nsAddressBook::NewAddressBook
|
|||
if(!db || !srcDirectory || !name)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// DIR_Server * server = nsnull;
|
||||
// nsresult rv = DIR_AddNewAddressBook(name, &server);
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIRDFService, rdfService, kRDFServiceCID, &rv);
|
||||
if(NS_FAILED(rv))
|
||||
|
@ -180,68 +178,51 @@ NS_IMETHODIMP nsAddressBook::NewAddressBook
|
|||
rv = NS_NewISupportsArray(getter_AddRefs(nameArray));
|
||||
if(NS_FAILED(rv))
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
/*
|
||||
nsCOMPtr<nsIRDFResource> itemResource;
|
||||
char *uri = PR_smprintf("%s%s", kDirectoryDataSourceRoot, server->fileName);
|
||||
rv = rdfService->GetResource(uri, getter_AddRefs(itemResource));
|
||||
if (uri)
|
||||
PR_smprintf_free(uri);
|
||||
nsCOMPtr<nsIAbDirectory> newDir = do_QueryInterface(itemResource);
|
||||
if (newDir)
|
||||
{
|
||||
newDir->SetDirName(server->description);
|
||||
newDir->SetServer(server);
|
||||
}
|
||||
else
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*/
|
||||
nsString nameStr = name;
|
||||
nsCOMPtr<nsIRDFLiteral> nameLiteral;
|
||||
|
||||
rdfService->GetLiteral(nameStr.GetUnicode(), getter_AddRefs(nameLiteral));
|
||||
nameArray->AppendElement(nameLiteral);
|
||||
// resourceArray->AppendElement(itemResource);
|
||||
|
||||
|
||||
DoCommand(db, "http://home.netscape.com/NC-rdf#NewDirectory", dirArray, nameArray);
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAddressBook::DeleteAddressBook
|
||||
(nsIDOMXULElement *tree, nsIDOMXULElement *srcDirectory, nsIDOMNodeList *nodeList)
|
||||
NS_IMETHODIMP nsAddressBook::DeleteAddressBooks
|
||||
(nsIRDFCompositeDataSource* db, nsIDOMXULElement *srcDirectory, nsIDOMNodeList *nodeList)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
if(!tree || !srcDirectory || !nodeList)
|
||||
if(!db || !srcDirectory || !nodeList)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsCOMPtr<nsIRDFCompositeDataSource> database;
|
||||
nsCOMPtr<nsISupportsArray> resourceArray, dirArray;
|
||||
nsCOMPtr<nsIRDFResource> resource;
|
||||
|
||||
rv = srcDirectory->GetResource(getter_AddRefs(resource));
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIRDFService, rdfService, kRDFServiceCID, &rv);
|
||||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
rv = tree->GetDatabase(getter_AddRefs(database));
|
||||
nsCOMPtr<nsISupportsArray> dirArray;
|
||||
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(dirArray));
|
||||
if(NS_FAILED(rv))
|
||||
return 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;
|
||||
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(dirArray));
|
||||
if(NS_FAILED(rv))
|
||||
{
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
dirArray->AppendElement(resource);
|
||||
|
||||
rv = DoCommand(database, NC_RDF_DELETE, dirArray, resourceArray);
|
||||
|
||||
DoCommand(db, NC_RDF_DELETE, dirArray, resourceArray);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ public:
|
|||
// nsIAddressBook
|
||||
NS_IMETHOD DeleteCards(nsIDOMXULElement *tree, nsIDOMXULElement *srcDirectory, nsIDOMNodeList *nodeList);
|
||||
NS_IMETHOD NewAddressBook(nsIRDFCompositeDataSource* db, nsIDOMXULElement *srcDirectory, const char *name);
|
||||
NS_IMETHOD DeleteAddressBook(nsIDOMXULElement *tree, nsIDOMXULElement *srcDirectory, nsIDOMNodeList *nodeList);
|
||||
NS_IMETHOD DeleteAddressBooks(nsIRDFCompositeDataSource* db, nsIDOMXULElement *srcDirectory, nsIDOMNodeList *nodeList);
|
||||
NS_IMETHOD PrintCard();
|
||||
NS_IMETHOD PrintAddressbook();
|
||||
NS_IMETHOD SetWebShellWindow(nsIDOMWindow *win);
|
||||
|
|
|
@ -66,24 +66,27 @@ nsAbCardDataSource::nsAbCardDataSource():
|
|||
|
||||
nsAbCardDataSource::~nsAbCardDataSource (void)
|
||||
{
|
||||
mRDFService->UnregisterDataSource(this);
|
||||
mRDFService->UnregisterDataSource(this);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
abSession->RemoveAddressBookListener(this);
|
||||
nsresult rv = NS_OK;
|
||||
NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
abSession->RemoveAddressBookListener(this);
|
||||
|
||||
nsrefcnt refcnt;
|
||||
nsrefcnt refcnt;
|
||||
|
||||
NS_RELEASE2(kNC_DisplayName, refcnt);
|
||||
NS_RELEASE2(kNC_PrimaryEmail, refcnt);
|
||||
NS_RELEASE2(kNC_WorkPhone, refcnt);
|
||||
NS_RELEASE2(kNC_DisplayName, refcnt);
|
||||
NS_RELEASE2(kNC_PrimaryEmail, refcnt);
|
||||
NS_RELEASE2(kNC_WorkPhone, refcnt);
|
||||
|
||||
NS_RELEASE2(kNC_Delete, refcnt);
|
||||
NS_RELEASE2(kNC_NewCard, refcnt);
|
||||
NS_RELEASE2(kNC_Delete, refcnt);
|
||||
NS_RELEASE2(kNC_NewCard, refcnt);
|
||||
|
||||
nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); // XXX probably need shutdown listener here
|
||||
mRDFService = nsnull;
|
||||
if (mRDFService)
|
||||
{
|
||||
nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService);
|
||||
mRDFService = nsnull;
|
||||
}
|
||||
}
|
||||
|
||||
nsresult nsAbCardDataSource::Init()
|
||||
|
|
|
@ -400,7 +400,7 @@ nsresult DIR_ContainsServer(DIR_Server* pServer, PRBool *hasDir)
|
|||
}
|
||||
}
|
||||
*hasDir = PR_FALSE;
|
||||
return NS_ERROR_FAILURE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult DIR_AddNewAddressBook(const char *name, DIR_Server** pServer)
|
||||
|
@ -1884,7 +1884,7 @@ static nsresult dir_DeleteServerContents (DIR_Server *server)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult DIR_DeleteServer (DIR_Server *server)
|
||||
nsresult DIR_DeleteServer(DIR_Server *server)
|
||||
{
|
||||
if (server)
|
||||
{
|
||||
|
@ -1895,6 +1895,32 @@ nsresult DIR_DeleteServer (DIR_Server *server)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult DIR_DeleteServerFromList(DIR_Server *server)
|
||||
{
|
||||
if (!server)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsFileSpec* dbPath = nsnull;
|
||||
|
||||
NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
abSession->GetUserProfileDirectory(&dbPath);
|
||||
|
||||
if (dbPath)
|
||||
{
|
||||
nsFileSpec prefFile = (*dbPath);
|
||||
prefFile += server->fileName;
|
||||
prefFile.Delete(PR_FALSE);
|
||||
|
||||
nsVoidArray *dirList = DIR_GetDirectories();
|
||||
DIR_SetServerPosition(dirList, server, DIR_POS_DELETE);
|
||||
DIR_DeleteServer(server);
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
nsresult DIR_DeleteServerList(nsVoidArray *wholeList)
|
||||
{
|
||||
DIR_Server *server = nsnull;
|
||||
|
@ -2651,14 +2677,16 @@ void DIR_SetFileName(char** fileName, const char* defaultName)
|
|||
NS_WITH_SERVICE(nsIAddrBookSession, abSession, kAddrBookSessionCID, &rv);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
abSession->GetUserProfileDirectory(&dbPath);
|
||||
|
||||
(*dbPath) += defaultName;
|
||||
dbPath->MakeUnique(defaultName);
|
||||
char* file = nsnull;
|
||||
file = dbPath->GetLeafName();
|
||||
*fileName = PL_strdup(file);
|
||||
if (file)
|
||||
nsCRT::free(file);
|
||||
if (dbPath)
|
||||
{
|
||||
(*dbPath) += defaultName;
|
||||
dbPath->MakeUnique(defaultName);
|
||||
char* file = nsnull;
|
||||
file = dbPath->GetLeafName();
|
||||
*fileName = PL_strdup(file);
|
||||
if (file)
|
||||
nsCRT::free(file);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
|
@ -3286,20 +3314,7 @@ void DIR_ClearPrefBranch(const char *branch)
|
|||
if (NS_FAILED(rv) || !pPref)
|
||||
return;
|
||||
|
||||
/* This little function provides a way to delete a prefs object but still
|
||||
* allow reassignment of that object later.
|
||||
*/
|
||||
char *recreateBranch = nsnull;
|
||||
|
||||
pPref->DeleteBranch (branch);
|
||||
recreateBranch = PR_smprintf("pref_inittree(\"%s\")", branch);
|
||||
if (recreateBranch)
|
||||
{
|
||||
#ifdef PREF_QuietEvaluateJSBuffer
|
||||
PREF_QuietEvaluateJSBuffer (recreateBranch, PL_strlen(recreateBranch));
|
||||
#endif /* PREF_QuietEvaluateJSBuffer */
|
||||
PR_smprintf_free(recreateBranch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -254,6 +254,7 @@ PRBool DIR_AreServersSame (DIR_Server *first, DIR_Server *second);
|
|||
DIR_Server *DIR_LookupServer(char *serverName, PRInt32 port, char *searchBase);
|
||||
|
||||
nsresult DIR_DeleteServer (DIR_Server *);
|
||||
nsresult DIR_DeleteServerFromList (DIR_Server *);
|
||||
nsresult DIR_DeleteServerList(nsVoidArray *wholeList);
|
||||
|
||||
#define DIR_POS_APPEND 0x80000000
|
||||
|
|
|
@ -472,7 +472,7 @@ NS_IMETHODIMP nsAbDirectoryDataSource::OnItemRemoved(nsISupports *parentDirector
|
|||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
//Notify a directory was deleted.
|
||||
NotifyObservers(parentResource, kNC_DirName, itemNode, PR_FALSE);
|
||||
NotifyObservers(parentResource, kNC_Child, itemNode, PR_FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче