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:
parent
d733571b2e
commit
f6eb7e2e8c
@ -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;
|
||||
};
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user