remember sort order in single folder virtual folder, sr=mscott 262145

This commit is contained in:
bienvenu%nventure.com 2004-10-01 20:23:02 +00:00
parent 789efce8a2
commit 1c4cc70fe1
7 changed files with 33 additions and 7 deletions

View File

@ -889,6 +889,8 @@ function FolderPaneSelectionChange()
else if (viewType == nsMsgViewType.eShowQuickSearchResults)
viewType = nsMsgViewType.eShowAllThreads; //override viewType - we don't want to start w/ quick search
ChangeFolderByURI(uriToLoad, viewType, viewFlags, sortType, sortOrder);
if (gVirtualFolderTerms)
gDBView.viewFolder = msgFolder;
}
}
else

View File

@ -280,6 +280,7 @@ interface nsIMsgDBView : nsISupports
boolean navigateStatus(in nsMsgNavigationTypeValue motion);
readonly attribute nsIMsgFolder msgFolder;
attribute nsIMsgFolder viewFolder; // in the case of virtual folders, the VF db.
nsMsgKey getKeyAt(in nsMsgViewIndex index);
nsIMsgFolder getFolderForViewIndex(in nsMsgViewIndex index); // mainly for search

View File

@ -1765,6 +1765,7 @@ NS_IMETHODIMP nsMsgDBView::Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sor
NS_ENSURE_SUCCESS(rv,rv);
m_db->AddListener(this);
m_folder = folder;
m_viewFolder = folder;
// determine if we are in a news folder or not.
// if yes, we'll show lines instead of size, and special icons in the thread pane
nsCOMPtr <nsIMsgIncomingServer> server;
@ -3437,10 +3438,11 @@ nsMsgDBView::GetLocationCollationKey(nsIMsgHdr *msgHdr, PRUint8 **result, PRUint
nsresult nsMsgDBView::SaveSortInfo(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder)
{
if (m_folder)
if (m_viewFolder)
{
nsCOMPtr <nsIDBFolderInfo> folderInfo;
nsresult rv = m_folder->GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(m_db));
nsCOMPtr <nsIMsgDatabase> db;
nsresult rv = m_viewFolder->GetDBFolderInfoAndDB(getter_AddRefs(folderInfo), getter_AddRefs(db));
if (NS_SUCCEEDED(rv) && folderInfo)
{
// save off sort type and order, view type and flags
@ -5424,6 +5426,20 @@ NS_IMETHODIMP nsMsgDBView::GetMsgFolder(nsIMsgFolder **aMsgFolder)
return NS_OK;
}
NS_IMETHODIMP nsMsgDBView::SetViewFolder(nsIMsgFolder *aMsgFolder)
{
m_viewFolder = aMsgFolder;
return NS_OK;
}
NS_IMETHODIMP nsMsgDBView::GetViewFolder(nsIMsgFolder **aMsgFolder)
{
NS_ENSURE_ARG_POINTER(aMsgFolder);
NS_IF_ADDREF(*aMsgFolder = m_viewFolder);
return NS_OK;
}
NS_IMETHODIMP
nsMsgDBView::GetNumSelected(PRUint32 *numSelected)
{

View File

@ -337,6 +337,7 @@ protected:
nsCOMPtr <nsIMsgDatabase> m_db;
nsCOMPtr <nsIMsgFolder> m_folder;
nsCOMPtr <nsIMsgFolder> m_viewFolder; // for virtual folders, the VF db.
nsCOMPtr <nsIAtom> mRedirectorTypeAtom;
nsCOMPtr <nsIAtom> mMessageTypeAtom; // news, rss, mail, etc.
nsMsgViewSortTypeValue m_sortType;

View File

@ -38,6 +38,7 @@
#include "msgCore.h"
#include "nsMsgQuickSearchDBView.h"
#include "nsMsgFolderFlags.h"
#include "nsIMsgHdr.h"
#include "nsMsgBaseCID.h"
#include "nsIMsgImapMailFolder.h"
@ -215,5 +216,10 @@ nsMsgQuickSearchDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrder
RestoreSelection(preservedKey, &preservedSelection);
if (mTree)
mTree->Invalidate();
PRUint32 folderFlags;
if (m_viewFolder && NS_SUCCEEDED(m_viewFolder->GetFlags(&folderFlags)) && folderFlags & MSG_FOLDER_FLAG_VIRTUAL)
SaveSortInfo(sortType, sortOrder);
return NS_OK;
}

View File

@ -57,7 +57,7 @@ nsMsgXFVirtualFolderDBView::~nsMsgXFVirtualFolderDBView()
NS_IMETHODIMP nsMsgXFVirtualFolderDBView::Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, PRInt32 *pCount)
{
m_virtualFolder = folder;
m_viewFolder = folder;
return nsMsgSearchDBView::Open(folder, sortType, sortOrder, viewFlags, pCount);
}
@ -155,11 +155,11 @@ nsMsgXFVirtualFolderDBView::OnSearchDone(nsresult status)
nsCOMPtr <nsIMsgDatabase> virtDatabase;
nsCOMPtr <nsIDBFolderInfo> dbFolderInfo;
nsresult rv = m_virtualFolder->GetDBFolderInfoAndDB(getter_AddRefs(dbFolderInfo), getter_AddRefs(virtDatabase));
nsresult rv = m_viewFolder->GetDBFolderInfoAndDB(getter_AddRefs(dbFolderInfo), getter_AddRefs(virtDatabase));
NS_ENSURE_SUCCESS(rv, rv);
dbFolderInfo->SetNumUnreadMessages(m_numUnread);
dbFolderInfo->SetNumMessages(m_numTotal);
m_virtualFolder->UpdateSummaryTotals(true); // force update from db.
m_viewFolder->UpdateSummaryTotals(true); // force update from db.
virtDatabase->Commit(nsMsgDBCommitType::kLargeCommit);
return rv;
}
@ -200,6 +200,6 @@ NS_IMETHODIMP nsMsgXFVirtualFolderDBView::DoCommand(nsMsgViewCommandTypeValue co
NS_IMETHODIMP nsMsgXFVirtualFolderDBView::GetMsgFolder(nsIMsgFolder **aMsgFolder)
{
NS_ENSURE_ARG_POINTER(aMsgFolder);
NS_IF_ADDREF(*aMsgFolder = m_virtualFolder);
NS_IF_ADDREF(*aMsgFolder = m_viewFolder);
return NS_OK;
}

View File

@ -66,7 +66,7 @@ public:
protected:
nsCOMPtr <nsIMsgFolder> m_virtualFolder;
nsCOMPtr <nsIMsgFolder> m_viewFolder;
nsWeakPtr m_searchSession;
PRInt32 m_numUnread;
PRInt32 m_numTotal;