fix Bug 11399 and add remove address book backend

This commit is contained in:
chuang%netscape.com 1999-08-09 19:09:32 +00:00
Родитель 5b65a4e45f
Коммит 74311a9c00
12 изменённых файлов: 123 добавлений и 113 удалений

Просмотреть файл

@ -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);
}
}
}