120349 r=cavin sr=mscott Add a handy accessor for getting parentMsgFolder

git-svn-id: svn://10.0.0.236/trunk@112808 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
naving%netscape.com 2002-01-25 01:48:07 +00:00
parent d733571b2e
commit f6eb7e2e8c
7 changed files with 72 additions and 95 deletions

View File

@ -405,4 +405,7 @@ const nsMsgBiffState nsMsgBiffState_Unknown = 2; // We dunno whether there is ne
* used to determine if we persist the close / open state of this folder or not
*/
[noscript]readonly attribute boolean persistElided;
/* handy accessor when we want a msg folder */
readonly attribute nsIMsgFolder parentMsgFolder;
};

View File

@ -739,20 +739,13 @@ function IsSpecialFolder(msgFolder, flags)
return false;
}
else if ((msgFolder.flags & flags) == 0) {
var folder = msgFolder.QueryInterface(Components.interfaces.nsIFolder);
var parentMsgFolder = msgFolder.parentMsgFolder;
if (folder && folder.parent) {
var parentMsgFolder = folder.parent.QueryInterface(Components.interfaces.nsIMsgFolder);
if(!parentMsgFolder) {
return false;
}
if(!parentMsgFolder) {
return false;
}
return IsSpecialFolder(parentMsgFolder, flags);
}
else {
return false;
}
return IsSpecialFolder(parentMsgFolder, flags);
}
else {
// the user can set their INBOX to be their SENT folder.

View File

@ -1697,14 +1697,8 @@ nsMsgFolderDataSource::NotifyAncestors(nsIMsgFolder *aFolder, nsIRDFResource *aP
return NS_OK;
}
nsCOMPtr <nsIFolder> folder = do_QueryInterface(aFolder, &rv);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr <nsIFolder> parentFolder;
rv = folder->GetParent(getter_AddRefs(parentFolder));
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr <nsIMsgFolder> parentMsgFolder = do_QueryInterface(parentFolder, &rv);
nsCOMPtr <nsIMsgFolder> parentMsgFolder;
rv = aFolder->GetParentMsgFolder(getter_AddRefs(parentMsgFolder));
NS_ENSURE_SUCCESS(rv,rv);
rv = parentMsgFolder->GetIsServer(&isServer);
@ -1717,7 +1711,7 @@ nsMsgFolderDataSource::NotifyAncestors(nsIMsgFolder *aFolder, nsIRDFResource *aP
return NS_OK;
}
nsCOMPtr<nsIRDFResource> parentFolderResource = do_QueryInterface(parentFolder,&rv);
nsCOMPtr<nsIRDFResource> parentFolderResource = do_QueryInterface(parentMsgFolder,&rv);
NS_ENSURE_SUCCESS(rv,rv);
NotifyPropertyChanged(parentFolderResource, aPropertyResource, aNode);

View File

@ -502,6 +502,16 @@ NS_IMETHODIMP nsMsgFolder::GetParent(nsIFolder **aParent)
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::GetParentMsgFolder(nsIMsgFolder **aParentMsgFolder)
{
NS_ENSURE_ARG_POINTER(aParentMsgFolder);
nsCOMPtr <nsIFolder> parent;
nsresult rv = GetParent(getter_AddRefs(parent));
if (NS_SUCCEEDED(rv) && parent)
rv = parent->QueryInterface(NS_GET_IID(nsIMsgFolder), (void **) aParentMsgFolder);
return rv;
}
NS_IMETHODIMP
nsMsgFolder::GetMessages(nsIMsgWindow *aMsgWindow, nsISimpleEnumerator* *result)
{
@ -639,16 +649,11 @@ nsMsgFolder::parseURI(PRBool needServer)
if (NS_FAILED(rv) || !server) {
// first try asking the parent instead of the URI
nsCOMPtr<nsIFolder> parent;
rv = GetParent(getter_AddRefs(parent));
if (NS_SUCCEEDED(rv) && parent) {
nsCOMPtr<nsIMsgFolder> parentMsgFolder =
do_QueryInterface(parent, &rv);
nsCOMPtr<nsIMsgFolder> parentMsgFolder;
rv = GetParentMsgFolder(getter_AddRefs(parentMsgFolder));
if (NS_SUCCEEDED(rv))
rv = parentMsgFolder->GetServer(getter_AddRefs(server));
}
if (NS_SUCCEEDED(rv) && parentMsgFolder)
rv = parentMsgFolder->GetServer(getter_AddRefs(server));
// no parent. do the extra work of asking
if (!server && needServer) {

View File

@ -200,6 +200,7 @@ public:
NS_IMETHOD GetStringWithFolderNameFromBundle(const char* msgName, PRUnichar **aResult);
NS_IMETHOD GetPersistElided(PRBool *aPersistElided);
NS_IMETHOD GetSortKey(PRUnichar **aSortKey);
NS_IMETHOD GetParentMsgFolder(nsIMsgFolder **aParentMsgFolder);
// end NS_DECL_NSIMSGFOLDER
// nsRDFResource overrides

View File

@ -899,11 +899,9 @@ NS_IMETHODIMP nsImapMailFolder::RemoveSubFolder (nsIMsgFolder *which)
NS_IMETHODIMP nsImapMailFolder::CreateStorageIfMissing(nsIUrlListener* urlListener)
{
nsresult status = NS_OK;
nsCOMPtr <nsIFolder> parent;
GetParent(getter_AddRefs(parent));
nsCOMPtr <nsIMsgFolder> msgParent;
if (parent)
msgParent = do_QueryInterface(parent);
GetParentMsgFolder(getter_AddRefs(msgParent));
// parent is probably not set because *this* was probably created by rdf
// and not by folder discovery. So, we have to compute the parent.
if (!msgParent)
@ -1986,7 +1984,6 @@ PRBool
nsImapMailFolder::TrashOrDescendentOfTrash(nsIMsgFolder* folder)
{
nsCOMPtr<nsIMsgFolder> parent;
nsCOMPtr<nsIFolder> iFolder;
nsCOMPtr<nsIMsgFolder> curFolder;
nsresult rv;
PRUint32 flags = 0;
@ -2001,9 +1998,7 @@ nsImapMailFolder::TrashOrDescendentOfTrash(nsIMsgFolder* folder)
if (NS_FAILED(rv)) return PR_FALSE;
if (flags & MSG_FOLDER_FLAG_TRASH)
return PR_TRUE;
rv = curFolder->GetParent(getter_AddRefs(iFolder));
if (NS_FAILED(rv)) return PR_FALSE;
parent = do_QueryInterface(iFolder, &rv);
rv = curFolder->GetParentMsgFolder(getter_AddRefs(parent));
if (NS_FAILED(rv)) return PR_FALSE;
curFolder = do_QueryInterface(parent, &rv);
} while (NS_SUCCEEDED(rv) && curFolder);
@ -5860,13 +5855,12 @@ NS_IMETHODIMP nsImapMailFolder::RenameClient(nsIMsgWindow *msgWindow, nsIMsgFold
unusedDB->Commit(nsMsgDBCommitType::kLargeCommit);
unusedDB->Close(PR_TRUE);
child->RenameSubFolders(msgWindow, msgFolder);
child->RenameSubFolders(msgWindow, msgFolder);
nsCOMPtr<nsIFolder> parent;
msgFolder->GetParent(getter_AddRefs(parent));
nsCOMPtr<nsIMsgFolder> msgParent = do_QueryInterface(parent);
msgFolder->SetParent(nsnull);
msgParent->PropagateDelete(msgFolder,PR_FALSE, nsnull);
nsCOMPtr<nsIMsgFolder> msgParent;
msgFolder->GetParentMsgFolder(getter_AddRefs(msgParent));
msgFolder->SetParent(nsnull);
msgParent->PropagateDelete(msgFolder,PR_FALSE, nsnull);
nsCOMPtr<nsISupports> childSupports(do_QueryInterface(child));
nsCOMPtr<nsISupports> parentSupports;

View File

@ -721,11 +721,9 @@ nsresult nsMsgLocalMailFolder::CreateDirectoryForFolder(nsFileSpec &path)
NS_IMETHODIMP nsMsgLocalMailFolder::CreateStorageIfMissing(nsIUrlListener* urlListener)
{
nsresult status = NS_OK;
nsCOMPtr <nsIFolder> parent;
GetParent(getter_AddRefs(parent));
nsCOMPtr <nsIMsgFolder> msgParent;
if (parent)
msgParent = do_QueryInterface(parent);
GetParentMsgFolder(getter_AddRefs(msgParent));
// parent is probably not set because *this* was probably created by rdf
// and not by folder discovery. So, we have to compute the parent.
if (!msgParent)
@ -1006,42 +1004,38 @@ NS_IMETHODIMP nsMsgLocalMailFolder::EmptyTrash(nsIMsgWindow *msgWindow,
rv = aEnumerator->First(); //will fail if no subfolders
if (NS_FAILED(rv)) return NS_OK;
}
nsCOMPtr<nsIFolder> parent;
rv = trashFolder->GetParent(getter_AddRefs(parent));
if (NS_SUCCEEDED(rv) && parent)
nsCOMPtr<nsIMsgFolder> parentFolder;
rv = trashFolder->GetParentMsgFolder(getter_AddRefs(parentFolder));
if (NS_SUCCEEDED(rv) && parentFolder)
{
nsCOMPtr<nsIMsgFolder> parentFolder = do_QueryInterface(parent, &rv);
if (NS_SUCCEEDED(rv) && parentFolder)
nsXPIDLString idlFolderName;
rv = trashFolder->GetName(getter_Copies(idlFolderName));
if (NS_SUCCEEDED(rv))
{
nsCOMPtr <nsIDBFolderInfo> dbFolderInfo;
nsCOMPtr <nsIDBFolderInfo> transferInfo;
nsCOMPtr <nsIMsgDatabase> db;
trashFolder->GetDBFolderInfoAndDB(getter_AddRefs(dbFolderInfo), getter_AddRefs(db));
if (dbFolderInfo)
dbFolderInfo->GetTransferInfo(getter_AddRefs(transferInfo));
dbFolderInfo = nsnull;
nsString folderName(idlFolderName);
trashFolder->SetParent(nsnull);
parentFolder->PropagateDelete(trashFolder, PR_TRUE, msgWindow);
parentFolder->CreateSubfolder(folderName.get(),nsnull);
nsCOMPtr<nsIMsgFolder> newTrashFolder;
rv = GetTrashFolder(getter_AddRefs(newTrashFolder));
if (NS_SUCCEEDED(rv) && newTrashFolder)
newTrashFolder->GetMsgDatabase(msgWindow, getter_AddRefs(db));
if (transferInfo && db)
{
nsXPIDLString idlFolderName;
rv = trashFolder->GetName(getter_Copies(idlFolderName));
if (NS_SUCCEEDED(rv))
{
nsCOMPtr <nsIDBFolderInfo> dbFolderInfo;
nsCOMPtr <nsIDBFolderInfo> transferInfo;
nsCOMPtr <nsIMsgDatabase> db;
trashFolder->GetDBFolderInfoAndDB(getter_AddRefs(dbFolderInfo), getter_AddRefs(db));
if (dbFolderInfo)
dbFolderInfo->GetTransferInfo(getter_AddRefs(transferInfo));
dbFolderInfo = nsnull;
nsString folderName(idlFolderName);
trashFolder->SetParent(nsnull);
parentFolder->PropagateDelete(trashFolder, PR_TRUE, msgWindow);
parentFolder->CreateSubfolder(folderName.get(),nsnull);
nsCOMPtr<nsIMsgFolder> newTrashFolder;
rv = GetTrashFolder(getter_AddRefs(newTrashFolder));
if (NS_SUCCEEDED(rv) && newTrashFolder)
newTrashFolder->GetMsgDatabase(msgWindow, getter_AddRefs(db));
if (transferInfo && db)
{
db->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
if (dbFolderInfo)
dbFolderInfo->InitFromTransferInfo(transferInfo);
}
}
db->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
if (dbFolderInfo)
dbFolderInfo->InitFromTransferInfo(transferInfo);
}
}
}
}
return rv;
@ -1065,16 +1059,13 @@ nsresult nsMsgLocalMailFolder::IsChildOfTrash(PRBool *result)
return rv;
}
nsCOMPtr<nsIFolder> parent;
nsCOMPtr<nsIMsgFolder> parentFolder;
nsCOMPtr<nsIMsgFolder> thisFolder;
rv = QueryInterface(NS_GET_IID(nsIMsgFolder), (void **)
getter_AddRefs(thisFolder));
while (!isServer && thisFolder) {
rv = thisFolder->GetParent(getter_AddRefs(parent));
if (NS_FAILED(rv)) return rv;
parentFolder = do_QueryInterface(parent, &rv);
rv = thisFolder->GetParentMsgFolder(getter_AddRefs(parentFolder));
if (NS_FAILED(rv)) return rv;
rv = parentFolder->GetIsServer(&isServer);
if (NS_FAILED(rv) || isServer) return rv;
@ -1240,13 +1231,12 @@ NS_IMETHODIMP nsMsgLocalMailFolder::DeleteSubFolders(
NS_IMETHODIMP nsMsgLocalMailFolder::Rename(const PRUnichar *aNewName, nsIMsgWindow *msgWindow)
{
nsCOMPtr<nsIFileSpec> oldPathSpec;
nsCOMPtr<nsIFolder> parent;
nsresult rv = GetPath(getter_AddRefs(oldPathSpec));
if (NS_FAILED(rv)) return rv;
rv = GetParent(getter_AddRefs(parent));
nsCOMPtr<nsIMsgFolder> parentFolder;
rv = GetParentMsgFolder(getter_AddRefs(parentFolder));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIMsgFolder> parentFolder = do_QueryInterface(parent);
nsCOMPtr<nsISupports> parentSupport = do_QueryInterface(parent);
nsCOMPtr<nsISupports> parentSupport = do_QueryInterface(parentFolder);
nsFileSpec fileSpec;
oldPathSpec->GetFileSpec(&fileSpec);
@ -2078,15 +2068,12 @@ nsMsgLocalMailFolder::CopyFolderLocal(nsIMsgFolder *srcFolder, PRBool isMoveFold
NotifyItemAdded(parentSupports, supports, "folderView");
}
nsCOMPtr <nsIFolder> parent;
nsCOMPtr<nsIMsgFolder> msgParent;
srcFolder->GetParent(getter_AddRefs(parent));
srcFolder->GetParentMsgFolder(getter_AddRefs(msgParent));
srcFolder->SetParent(nsnull);
if (parent)
if (msgParent)
{
msgParent = do_QueryInterface(parent);
if (msgParent)
msgParent->PropagateDelete(srcFolder, PR_FALSE, msgWindow); // The files have already been moved, so delete storage PR_FALSE
msgParent->PropagateDelete(srcFolder, PR_FALSE, msgWindow); // The files have already been moved, so delete storage PR_FALSE
oldPath.Delete(PR_TRUE); //berkeley mailbox
summarySpec.Delete(PR_TRUE); //msf file
if (!oldPath.IsDirectory())