Use nsIMsgDBHdr and user converter enumerator for returning messages.
git-svn-id: svn://10.0.0.236/trunk@29078 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -33,6 +33,8 @@
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsXPComCIID.h"
|
||||
#include "nsIImapUrl.h"
|
||||
#include "nsImapUtils.h"
|
||||
#include "nsMsgUtils.h"
|
||||
#include "nsIMsgMailSession.h"
|
||||
|
||||
// we need this because of an egcs 1.0 (and possibly gcc) compiler bug
|
||||
@@ -157,7 +159,7 @@ NS_IMETHODIMP nsImapMailFolder::GetPathName(nsNativeFileSpec& aPathName)
|
||||
nsFileSpec nopath("");
|
||||
if (m_pathName == nopath)
|
||||
{
|
||||
nsresult rv = nsURI2Path(kImapRootURI, mURI, m_pathName);
|
||||
nsresult rv = nsImapURI2Path(kImapRootURI, mURI, m_pathName);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
aPathName = m_pathName;
|
||||
@@ -393,7 +395,16 @@ NS_IMETHODIMP nsImapMailFolder::GetMessages(nsIEnumerator* *result)
|
||||
rv = GetDatabase();
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = m_mailDatabase->EnumerateMessages(result);
|
||||
{
|
||||
nsIEnumerator *msgHdrEnumerator = nsnull;
|
||||
nsMessageFromMsgHdrEnumerator *messageEnumerator = nsnull;
|
||||
rv = m_mailDatabase->EnumerateMessages(&msgHdrEnumerator);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = NS_NewMessageFromMsgHdrEnumerator(msgHdrEnumerator,
|
||||
this, &messageEnumerator);
|
||||
*result = messageEnumerator;
|
||||
NS_IF_RELEASE(msgHdrEnumerator);
|
||||
}
|
||||
else
|
||||
return rv;
|
||||
|
||||
@@ -550,7 +561,7 @@ NS_IMETHODIMP nsImapMailFolder::GetName(char ** name)
|
||||
}
|
||||
}
|
||||
nsAutoString folderName;
|
||||
nsURI2Name(kImapRootURI, mURI, folderName);
|
||||
nsImapURI2Name(kImapRootURI, mURI, folderName);
|
||||
*name = folderName.ToNewCString();
|
||||
|
||||
return NS_OK;
|
||||
@@ -1032,7 +1043,14 @@ NS_IMETHODIMP nsImapMailFolder::AbortHeaderParseStream(nsIImapProtocol*
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgHdr, nsIMessage **message)
|
||||
{
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::OnKeyChange(nsMsgKey aKeyChanged,
|
||||
int32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
@@ -1045,22 +1063,31 @@ NS_IMETHODIMP nsImapMailFolder::OnKeyDeleted(nsMsgKey aKeyChanged,
|
||||
int32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsIMessage *pMessage;
|
||||
m_mailDatabase->GetMsgHdrForKey(aKeyChanged, &pMessage);
|
||||
nsString author, subject;
|
||||
nsISupports *msgSupports;
|
||||
if(NS_SUCCEEDED(pMessage->QueryInterface(kISupportsIID, (void**)&msgSupports)))
|
||||
nsIMsgDBHdr *pMsgDBHdr = nsnull;
|
||||
nsresult rv = m_mailDatabase->GetMsgHdrForKey(aKeyChanged, &pMsgDBHdr);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
PRUint32 i;
|
||||
for(i = 0; i < mListeners->Count(); i++)
|
||||
nsIMessage *message = nsnull;
|
||||
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, &message);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
|
||||
listener->OnItemRemoved(this, msgSupports);
|
||||
NS_RELEASE(listener);
|
||||
nsISupports *msgSupports;
|
||||
if(NS_SUCCEEDED(message->QueryInterface(kISupportsIID, (void**)&msgSupports)))
|
||||
{
|
||||
PRUint32 i;
|
||||
for(i = 0; i < mListeners->Count(); i++)
|
||||
{
|
||||
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
|
||||
listener->OnItemRemoved(this, msgSupports);
|
||||
NS_RELEASE(listener);
|
||||
}
|
||||
NS_IF_RELEASE(msgSupports);
|
||||
}
|
||||
NS_IF_RELEASE(message);
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
NS_IF_RELEASE(pMsgDBHdr);
|
||||
}
|
||||
UpdateSummaryTotals();
|
||||
NS_RELEASE(msgSupports);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@@ -1069,19 +1096,27 @@ NS_IMETHODIMP nsImapMailFolder::OnKeyAdded(nsMsgKey aKeyChanged,
|
||||
int32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsIMessage *pMessage;
|
||||
m_mailDatabase->GetMsgHdrForKey(aKeyChanged, &pMessage);
|
||||
nsString author, subject;
|
||||
nsISupports *msgSupports;
|
||||
if(pMessage && NS_SUCCEEDED(pMessage->QueryInterface(kISupportsIID, (void**)&msgSupports)))
|
||||
nsresult rv;
|
||||
nsIMsgDBHdr *pMsgDBHdr;
|
||||
rv = m_mailDatabase->GetMsgHdrForKey(aKeyChanged, &pMsgDBHdr);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
NotifyItemAdded(msgSupports);
|
||||
nsIMessage *message;
|
||||
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, &message);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsISupports *msgSupports;
|
||||
if(message && NS_SUCCEEDED(message->QueryInterface(kISupportsIID, (void**)&msgSupports)))
|
||||
{
|
||||
NotifyItemAdded(msgSupports);
|
||||
NS_IF_RELEASE(msgSupports);
|
||||
}
|
||||
UpdateSummaryTotals();
|
||||
NS_IF_RELEASE(message);
|
||||
}
|
||||
NS_IF_RELEASE(pMsgDBHdr);
|
||||
}
|
||||
UpdateSummaryTotals();
|
||||
NS_RELEASE(msgSupports);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_OK;}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::OnAnnouncerGoingAway(nsIDBChangeAnnouncer *
|
||||
instigator)
|
||||
@@ -1109,7 +1144,6 @@ NS_IMETHODIMP nsImapMailFolder::EndCopy(PRBool copySucceeded)
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
// both of these algorithms assume that key arrays and flag states are sorted by increasing key.
|
||||
void nsImapMailFolder::FindKeysToDelete(const nsMsgKeyArray &existingKeys, nsMsgKeyArray &keysToDelete, nsImapFlagAndUidState *flagState)
|
||||
{
|
||||
@@ -1237,7 +1271,7 @@ void nsImapMailFolder::PrepareToAddHeadersToMailDB(nsIImapProtocol* aProtocol, c
|
||||
}
|
||||
|
||||
|
||||
void nsImapMailFolder::TweakHeaderFlags(nsIImapProtocol* aProtocol, nsIMessage *tweakMe)
|
||||
void nsImapMailFolder::TweakHeaderFlags(nsIImapProtocol* aProtocol, nsIMsgDBHdr *tweakMe)
|
||||
{
|
||||
if (m_mailDatabase && aProtocol && tweakMe)
|
||||
{
|
||||
|
||||
@@ -102,6 +102,7 @@ public:
|
||||
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo,
|
||||
nsIMsgDatabase **db);
|
||||
NS_IMETHOD DeleteMessage(nsIMessage *message);
|
||||
NS_IMETHOD CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgHdr, nsIMessage **message);
|
||||
|
||||
// nsIImapMailFolderSink methods
|
||||
// Tell mail master about a discovered imap mailbox
|
||||
@@ -250,7 +251,7 @@ protected:
|
||||
void PrepareToAddHeadersToMailDB(nsIImapProtocol* aProtocol, const
|
||||
nsMsgKeyArray &keysToFetch,
|
||||
mailbox_spec *boxSpec);
|
||||
void TweakHeaderFlags(nsIImapProtocol* aProtocol, nsIMessage *tweakMe);
|
||||
void TweakHeaderFlags(nsIImapProtocol* aProtocol, nsIMsgDBHdr *tweakMe);
|
||||
nsresult AddDirectorySeparator(nsFileSpec &path);
|
||||
nsresult CreateDirectoryForFolder(nsFileSpec &path);
|
||||
nsresult CreateSubFolders(nsFileSpec &path);
|
||||
|
||||
Reference in New Issue
Block a user