Bug #266139 --> Unable to open messages in a cross folder virtual folder in a stand alone message. Also add support for deleting messages in XFVF's from the stand alone message window.

sr=bienvenu


git-svn-id: svn://10.0.0.236/trunk@164544 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
scott%scott-macgregor.org 2004-10-28 05:13:07 +00:00
parent a14f77173f
commit 0630886e00
5 changed files with 83 additions and 5 deletions

View File

@ -993,9 +993,9 @@ nsresult nsMsgDBView::UpdateDisplayMessage(nsMsgViewIndex viewPosition)
mCommandUpdater->DisplayMessageChanged(folder, subject, keywords);
if (m_folder)
if (folder)
{
rv = m_folder->SetLastMessageLoaded(m_keys[viewPosition]);
rv = folder->SetLastMessageLoaded(m_keys[viewPosition]);
NS_ENSURE_SUCCESS(rv,rv);
}
} // if view position is valid
@ -5531,7 +5531,9 @@ nsMsgDBView::GetMsgToSelectAfterDelete(nsMsgViewIndex *msgToSelectAfterDelete)
rv = mTreeSelection->GetRangeAt(i, &startRange, &endRange);
*msgToSelectAfterDelete = PR_MIN(*msgToSelectAfterDelete, startRange);
}
nsCOMPtr <nsIMsgImapMailFolder> imapFolder = do_QueryInterface(m_folder);
nsCOMPtr<nsIMsgFolder> folder;
GetMsgFolder(getter_AddRefs(folder));
nsCOMPtr <nsIMsgImapMailFolder> imapFolder = do_QueryInterface(folder);
PRBool thisIsImapFolder = (imapFolder != nsnull);
if (thisIsImapFolder) //need to update the imap-delete model, can change more than once in a session.
GetImapDeleteModel(nsnull);

View File

@ -76,6 +76,45 @@ NS_IMETHODIMP nsMsgSearchDBView::Open(nsIMsgFolder *folder, nsMsgViewSortTypeVal
return rv;
}
NS_IMETHODIMP
nsMsgSearchDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMessengerInstance,
nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCmdUpdater)
{
nsMsgDBView::CopyDBView(aNewMsgDBView, aMessengerInstance, aMsgWindow, aCmdUpdater);
nsMsgSearchDBView* newMsgDBView = (nsMsgSearchDBView *) aNewMsgDBView;
// now copy all of our private member data
newMsgDBView->mDestFolder = mDestFolder;
newMsgDBView->mCommand = mCommand;
newMsgDBView->mTotalIndices = mTotalIndices;
newMsgDBView->mCurIndex = mCurIndex;
if (m_folders)
m_folders->Clone(getter_AddRefs(newMsgDBView->m_folders));
if (m_hdrsForEachFolder)
m_hdrsForEachFolder->Clone(getter_AddRefs(newMsgDBView->m_hdrsForEachFolder));
if (m_copyListenerList)
m_copyListenerList->Clone(getter_AddRefs(newMsgDBView->m_copyListenerList));
if (m_uniqueFoldersSelected)
m_uniqueFoldersSelected->Clone(getter_AddRefs(newMsgDBView->m_uniqueFoldersSelected));
PRInt32 count = m_dbToUseList.Count();
for(PRInt32 i = 0; i < count; i++)
{
newMsgDBView->m_dbToUseList.AppendObject(m_dbToUseList[i]);
// register the new view with the database so it gets notifications
m_dbToUseList[i]->AddListener(newMsgDBView);
}
// nsUInt32Array* mTestIndices;
return NS_OK;
}
NS_IMETHODIMP nsMsgSearchDBView::Close()
{
PRInt32 count = m_dbToUseList.Count();

View File

@ -56,6 +56,8 @@ public:
virtual const char * GetViewName(void) {return "SearchView"; }
NS_IMETHOD Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder,
nsMsgViewFlagsTypeValue viewFlags, PRInt32 *pCount);
NS_IMETHOD CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMessengerInstance,
nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCmdUpdater);
NS_IMETHOD Close();
NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder);
NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command);
@ -89,7 +91,6 @@ protected:
PRInt32 mCurIndex;
nsMsgViewIndex* mIndicesForChainedDeleteAndFile;
nsUInt32Array* mTestIndices;
PRInt32 mTotalIndices;
nsCOMArray<nsIMsgDatabase> m_dbToUseList;
nsMsgViewCommandTypeValue mCommand;

View File

@ -71,6 +71,39 @@ NS_IMETHODIMP nsMsgXFVirtualFolderDBView::Close()
return NS_OK;
}
NS_IMETHODIMP
nsMsgXFVirtualFolderDBView::CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow,
nsIMsgDBViewCommandUpdater *aCmdUpdater, nsIMsgDBView **_retval)
{
nsMsgXFVirtualFolderDBView* newMsgDBView;
NS_NEWXPCOM(newMsgDBView, nsMsgXFVirtualFolderDBView);
if (!newMsgDBView)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = CopyDBView(newMsgDBView, aMessengerInstance, aMsgWindow, aCmdUpdater);
NS_ENSURE_SUCCESS(rv,rv);
NS_IF_ADDREF(*_retval = newMsgDBView);
return NS_OK;
}
NS_IMETHODIMP
nsMsgXFVirtualFolderDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMessengerInstance,
nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCmdUpdater)
{
nsMsgSearchDBView::CopyDBView(aNewMsgDBView, aMessengerInstance, aMsgWindow, aCmdUpdater);
nsMsgXFVirtualFolderDBView* newMsgDBView = (nsMsgXFVirtualFolderDBView *) aNewMsgDBView;
newMsgDBView->m_viewFolder = m_viewFolder;
newMsgDBView->m_numUnread = m_numUnread;
newMsgDBView->m_numTotal = m_numTotal;
return NS_OK;
}
NS_IMETHODIMP nsMsgXFVirtualFolderDBView::GetViewType(nsMsgViewTypeValue *aViewType)
{
NS_ENSURE_ARG_POINTER(aViewType);

View File

@ -57,13 +57,16 @@ public:
virtual const char * GetViewName(void) {return "XFVirtualFolderView"; }
NS_IMETHOD Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder,
nsMsgViewFlagsTypeValue viewFlags, PRInt32 *pCount);
NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow,
nsIMsgDBViewCommandUpdater *aCmdUpdater, nsIMsgDBView **_retval);
NS_IMETHOD CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMessengerInstance,
nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCmdUpdater);
NS_IMETHOD Close();
NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType);
NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command);
virtual nsresult OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey parentKey, PRBool ensureListed);
NS_IMETHOD GetMsgFolder(nsIMsgFolder **aMsgFolder);
protected:
nsCOMPtr <nsIMsgFolder> m_viewFolder;