зеркало из https://github.com/mozilla/gecko-dev.git
Derive from nsMsgDBFolder.
This commit is contained in:
Родитель
baf9ba08bc
Коммит
a9e70b268a
|
@ -67,7 +67,7 @@ static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID);
|
|||
#endif
|
||||
|
||||
nsImapMailFolder::nsImapMailFolder() :
|
||||
nsMsgFolder(), m_pathName(""),
|
||||
m_pathName(""),
|
||||
m_initialized(PR_FALSE), m_haveReadNameFromDB(PR_FALSE),
|
||||
m_msgParser(nsnull), m_curMsgUid(0), m_nextMessageByteLength(0),
|
||||
m_urlRunning(PR_FALSE), m_haveDiscoverAllFolders(PR_FALSE)
|
||||
|
@ -102,12 +102,10 @@ nsImapMailFolder::nsImapMailFolder() :
|
|||
|
||||
nsImapMailFolder::~nsImapMailFolder()
|
||||
{
|
||||
if (m_mailDatabase)
|
||||
m_mailDatabase->Close(PR_TRUE);
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsImapMailFolder, nsMsgFolder)
|
||||
NS_IMPL_RELEASE_INHERITED(nsImapMailFolder, nsMsgFolder)
|
||||
NS_IMPL_ADDREF_INHERITED(nsImapMailFolder, nsMsgDBFolder)
|
||||
NS_IMPL_RELEASE_INHERITED(nsImapMailFolder, nsMsgDBFolder)
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
|
@ -118,18 +116,10 @@ NS_IMETHODIMP nsImapMailFolder::QueryInterface(REFNSIID aIID, void** aInstancePt
|
|||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIMsgImapMailFolder*, this);
|
||||
}
|
||||
else if (aIID.Equals(nsIDBChangeListener::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDBChangeListener*, this);
|
||||
}
|
||||
else if(aIID.Equals(nsICopyMessageListener::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsICopyMessageListener*, this);
|
||||
}
|
||||
else if (aIID.Equals(nsIFolder::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIFolder*, this);
|
||||
}
|
||||
else if (aIID.Equals(nsIImapMailFolderSink::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIImapMailFolderSink*, this);
|
||||
|
@ -321,7 +311,7 @@ NS_IMETHODIMP nsImapMailFolder::GetSubFolders(nsIEnumerator* *result)
|
|||
if (NS_SUCCEEDED(GetDatabase()))
|
||||
{
|
||||
nsCOMPtr <nsIDBFolderInfo> dbFolderInfo ;
|
||||
m_mailDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
mDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
|
||||
if (dbFolderInfo)
|
||||
dbFolderInfo->SetMailboxName(name);
|
||||
|
@ -377,7 +367,7 @@ NS_IMETHODIMP nsImapMailFolder::ReplaceElement(nsISupports* element,
|
|||
nsresult nsImapMailFolder::GetDatabase()
|
||||
{
|
||||
nsresult folderOpen = NS_OK;
|
||||
if (m_mailDatabase == nsnull)
|
||||
if (!mDatabase)
|
||||
{
|
||||
nsNativeFileSpec path;
|
||||
nsresult rv = GetPathName(path);
|
||||
|
@ -388,14 +378,14 @@ nsresult nsImapMailFolder::GetDatabase()
|
|||
rv = nsComponentManager::CreateInstance(kCImapDB, nsnull, nsIMsgDatabase::GetIID(), (void **) &mailDBFactory);
|
||||
if (NS_SUCCEEDED(rv) && mailDBFactory)
|
||||
{
|
||||
folderOpen = mailDBFactory->Open(path, PR_TRUE, (nsIMsgDatabase **) &m_mailDatabase, PR_TRUE);
|
||||
folderOpen = mailDBFactory->Open(path, PR_TRUE, getter_AddRefs(mDatabase), PR_TRUE);
|
||||
|
||||
NS_RELEASE(mailDBFactory);
|
||||
}
|
||||
|
||||
if(m_mailDatabase)
|
||||
if(mDatabase)
|
||||
{
|
||||
m_mailDatabase->AddListener(this);
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
// if we have to regenerate the folder, run the parser url.
|
||||
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)
|
||||
|
@ -504,7 +494,7 @@ NS_IMETHODIMP nsImapMailFolder::GetMessages(nsIEnumerator* *result)
|
|||
{
|
||||
nsIEnumerator *msgHdrEnumerator = nsnull;
|
||||
nsMessageFromMsgHdrEnumerator *messageEnumerator = nsnull;
|
||||
rv = m_mailDatabase->EnumerateMessages(&msgHdrEnumerator);
|
||||
rv = mDatabase->EnumerateMessages(&msgHdrEnumerator);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = NS_NewMessageFromMsgHdrEnumerator(msgHdrEnumerator,
|
||||
this,
|
||||
|
@ -521,44 +511,6 @@ NS_IMETHODIMP nsImapMailFolder::GetMessages(nsIEnumerator* *result)
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::GetThreads(nsIEnumerator** threadEnumerator)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::GetThreadForMessage(nsIMessage *message,
|
||||
nsIMsgThread **thread)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
return rv;
|
||||
}
|
||||
|
||||
//This needs to be moved up into common base class.
|
||||
NS_IMETHODIMP
|
||||
nsImapMailFolder::HasMessage(nsIMessage *message, PRBool *hasMessage)
|
||||
{
|
||||
if(!hasMessage)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv = GetDatabase();
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMsgDBHdr> msgDBHdr, msgDBHdrForKey;
|
||||
nsCOMPtr<nsIDBMessage> dbMessage(do_QueryInterface(message, &rv));
|
||||
nsMsgKey key;
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = msgDBHdr->GetMessageKey(&key);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = m_mailDatabase->ContainsKey(key, hasMessage);
|
||||
|
||||
}
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::CreateSubfolder(const char *folderName)
|
||||
{
|
||||
|
@ -675,12 +627,12 @@ NS_IMETHODIMP nsImapMailFolder::GetName(char ** name)
|
|||
{
|
||||
//Need to read the name from the database
|
||||
result = GetDatabase();
|
||||
if (NS_SUCCEEDED(result) && m_mailDatabase)
|
||||
if (NS_SUCCEEDED(result) && mDatabase)
|
||||
{
|
||||
nsString folderName;
|
||||
|
||||
nsIDBFolderInfo *dbFolderInfo = nsnull;
|
||||
m_mailDatabase->GetDBFolderInfo(&dbFolderInfo);
|
||||
mDatabase->GetDBFolderInfo(&dbFolderInfo);
|
||||
if (dbFolderInfo)
|
||||
{
|
||||
dbFolderInfo->GetMailboxName(folderName);
|
||||
|
@ -1018,17 +970,17 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
|||
(void **) getter_AddRefs(mailDBFactory));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if (!m_mailDatabase)
|
||||
if (!mDatabase)
|
||||
{
|
||||
// if we pass in PR_TRUE for upgrading, the db code will ignore the
|
||||
// summary out of date problem for now.
|
||||
rv = mailDBFactory->Open(dbName, PR_TRUE, (nsIMsgDatabase **)
|
||||
getter_AddRefs(m_mailDatabase), PR_TRUE);
|
||||
getter_AddRefs(mDatabase), PR_TRUE);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
if (!m_mailDatabase)
|
||||
if (!mDatabase)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
m_mailDatabase->AddListener(this);
|
||||
mDatabase->AddListener(this);
|
||||
}
|
||||
if (aSpec->folderSelected)
|
||||
{
|
||||
|
@ -1038,12 +990,12 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
|||
nsCOMPtr<nsIDBFolderInfo> dbFolderInfo;
|
||||
PRInt32 imapUIDValidity = 0;
|
||||
|
||||
rv = m_mailDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
rv = mDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
|
||||
if (NS_SUCCEEDED(rv) && dbFolderInfo)
|
||||
dbFolderInfo->GetImapUidValidity(&imapUIDValidity);
|
||||
m_mailDatabase->ListAllKeys(existingKeys);
|
||||
if (m_mailDatabase->ListAllOfflineDeletes(&existingKeys) > 0)
|
||||
mDatabase->ListAllKeys(existingKeys);
|
||||
if (mDatabase->ListAllOfflineDeletes(&existingKeys) > 0)
|
||||
existingKeys.QuickSort();
|
||||
if ((imapUIDValidity != aSpec->folder_UIDVALIDITY) /* && // if UIDVALIDITY Changed
|
||||
!NET_IsOffline() */)
|
||||
|
@ -1053,8 +1005,8 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
|||
TNeoFolderInfoTransfer *originalInfo = NULL;
|
||||
originalInfo = new TNeoFolderInfoTransfer(dbFolderInfo);
|
||||
#endif // 0
|
||||
m_mailDatabase->ForceClosed();
|
||||
m_mailDatabase = null_nsCOMPtr();
|
||||
mDatabase->ForceClosed();
|
||||
mDatabase = null_nsCOMPtr();
|
||||
|
||||
nsLocalFolderSummarySpec summarySpec(dbName);
|
||||
// Remove summary file.
|
||||
|
@ -1062,30 +1014,30 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
|||
|
||||
// Create a new summary file, update the folder message counts, and
|
||||
// Close the summary file db.
|
||||
rv = mailDBFactory->Open(dbName, PR_TRUE, getter_AddRefs(m_mailDatabase), PR_FALSE);
|
||||
rv = mailDBFactory->Open(dbName, PR_TRUE, getter_AddRefs(mDatabase), PR_FALSE);
|
||||
|
||||
// ********** Important *************
|
||||
// David, help me here I don't know this is right or wrong
|
||||
if (rv == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING)
|
||||
rv = NS_OK;
|
||||
|
||||
if (NS_FAILED(rv) && m_mailDatabase)
|
||||
if (NS_FAILED(rv) && mDatabase)
|
||||
{
|
||||
m_mailDatabase->ForceClosed();
|
||||
m_mailDatabase = null_nsCOMPtr();
|
||||
mDatabase->ForceClosed();
|
||||
mDatabase = null_nsCOMPtr();
|
||||
}
|
||||
else if (NS_SUCCEEDED(rv) && m_mailDatabase)
|
||||
else if (NS_SUCCEEDED(rv) && mDatabase)
|
||||
{
|
||||
#if TRANSFER_INFO
|
||||
if (originalInfo)
|
||||
{
|
||||
originalInfo->TransferFolderInfo(*m_mailDatabase->m_dbFolderInfo);
|
||||
originalInfo->TransferFolderInfo(mDatabase->m_dbFolderInfo);
|
||||
delete originalInfo;
|
||||
}
|
||||
SummaryChanged();
|
||||
m_mailDatabase->AddListener(this);
|
||||
mDatabase->AddListener(this);
|
||||
#endif
|
||||
rv = m_mailDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
rv = mDatabase->GetDBFolderInfo(getter_AddRefs(dbFolderInfo));
|
||||
}
|
||||
// store the new UIDVALIDITY value
|
||||
|
||||
|
@ -1121,7 +1073,7 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(
|
|||
PRUint32 total;
|
||||
|
||||
// It would be nice to notify RDF or whoever of a mass delete here.
|
||||
m_mailDatabase->DeleteMessages(&keysToDelete,NULL);
|
||||
mDatabase->DeleteMessages(&keysToDelete,NULL);
|
||||
total = keysToDelete.GetSize();
|
||||
}
|
||||
if (keysToFetch.GetSize())
|
||||
|
@ -1213,14 +1165,14 @@ NS_IMETHODIMP nsImapMailFolder::SetupHeaderParseStream(
|
|||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
if (!m_mailDatabase)
|
||||
if (!mDatabase)
|
||||
GetDatabase();
|
||||
|
||||
m_nextMessageByteLength = aStreamInfo->size;
|
||||
if (!m_msgParser)
|
||||
{
|
||||
m_msgParser = new nsParseMailMessageState;
|
||||
m_msgParser->SetMailDB(m_mailDatabase);
|
||||
m_msgParser->SetMailDB(mDatabase);
|
||||
}
|
||||
else
|
||||
m_msgParser->Clear();
|
||||
|
@ -1277,10 +1229,10 @@ NS_IMETHODIMP nsImapMailFolder::NormalEndHeaderParseStream(nsIImapProtocol*
|
|||
m_msgParser->m_newMsgHdr->SetMessageKey(m_curMsgUid);
|
||||
TweakHeaderFlags(aProtocol, m_msgParser->m_newMsgHdr);
|
||||
// here we need to tweak flags from uid state..
|
||||
m_mailDatabase->AddNewHdrToDB(m_msgParser->m_newMsgHdr, PR_TRUE);
|
||||
mDatabase->AddNewHdrToDB(m_msgParser->m_newMsgHdr, PR_TRUE);
|
||||
m_msgParser->FinishHeader();
|
||||
if (m_mailDatabase)
|
||||
m_mailDatabase->Commit(kLargeCommit); // don't really want to do this
|
||||
if (mDatabase)
|
||||
mDatabase->Commit(kLargeCommit); // don't really want to do this
|
||||
// for every message...
|
||||
// but I can't find the event that
|
||||
// means we've finished getting
|
||||
|
@ -1334,75 +1286,6 @@ NS_IMETHODIMP nsImapMailFolder::CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgDBHdr,
|
|||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::OnKeyChange(nsMsgKey aKeyChanged,
|
||||
PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::OnKeyDeleted(nsMsgKey aKeyChanged,
|
||||
PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsCOMPtr<nsIMsgDBHdr> pMsgDBHdr;
|
||||
nsresult rv = m_mailDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(pMsgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMessage> message;
|
||||
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, getter_AddRefs(message));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsISupports> msgSupports = do_QueryInterface(message);
|
||||
if(msgSupports)
|
||||
{
|
||||
PRUint32 i;
|
||||
for(i = 0; i < mListeners->Count(); i++)
|
||||
{
|
||||
nsIFolderListener *listener = (nsIFolderListener*)mListeners->ElementAt(i);
|
||||
listener->OnItemRemoved(this, msgSupports);
|
||||
}
|
||||
}
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::OnKeyAdded(nsMsgKey aKeyChanged,
|
||||
PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIMsgDBHdr> pMsgDBHdr;
|
||||
rv = m_mailDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(pMsgDBHdr));
|
||||
if(NS_SUCCEEDED(rv) && pMsgDBHdr)
|
||||
{
|
||||
nsCOMPtr<nsIMessage> message;
|
||||
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, getter_AddRefs(message));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsISupports> msgSupports = do_QueryInterface(message);
|
||||
if(msgSupports)
|
||||
NotifyItemAdded(msgSupports);
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
}
|
||||
return NS_OK;}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::OnAnnouncerGoingAway(nsIDBChangeAnnouncer *
|
||||
instigator)
|
||||
{
|
||||
if (m_mailDatabase)
|
||||
{
|
||||
m_mailDatabase->RemoveListener(this);
|
||||
m_mailDatabase = null_nsCOMPtr();
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::BeginCopy(nsIMessage *message)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
@ -1551,7 +1434,7 @@ void nsImapMailFolder::PrepareToAddHeadersToMailDB(nsIImapProtocol* aProtocol, c
|
|||
|
||||
void nsImapMailFolder::TweakHeaderFlags(nsIImapProtocol* aProtocol, nsIMsgDBHdr *tweakMe)
|
||||
{
|
||||
if (m_mailDatabase && aProtocol && tweakMe)
|
||||
if (mDatabase && aProtocol && tweakMe)
|
||||
{
|
||||
tweakMe->SetMessageKey(m_curMsgUid);
|
||||
tweakMe->SetMessageSize(m_nextMessageByteLength);
|
||||
|
@ -1700,11 +1583,11 @@ nsImapMailFolder::NotifyMessageFlags(nsIImapProtocol* aProtocol,
|
|||
{
|
||||
nsMsgKey msgKey = aKeyStruct->key;
|
||||
imapMessageFlagsType flags = aKeyStruct->flags;
|
||||
if (NS_SUCCEEDED(GetDatabase()) && m_mailDatabase)
|
||||
if (NS_SUCCEEDED(GetDatabase()) && mDatabase)
|
||||
{
|
||||
m_mailDatabase->MarkRead(msgKey, (flags & kImapMsgSeenFlag) != 0, nsnull);
|
||||
m_mailDatabase->MarkReplied(msgKey, (flags & kImapMsgAnsweredFlag) != 0, nsnull);
|
||||
m_mailDatabase->MarkMarked(msgKey, (flags & kImapMsgFlaggedFlag) != 0, nsnull);
|
||||
mDatabase->MarkRead(msgKey, (flags & kImapMsgSeenFlag) != 0, nsnull);
|
||||
mDatabase->MarkReplied(msgKey, (flags & kImapMsgAnsweredFlag) != 0, nsnull);
|
||||
mDatabase->MarkMarked(msgKey, (flags & kImapMsgFlaggedFlag) != 0, nsnull);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -1758,16 +1641,16 @@ nsImapMailFolder::NotifyMessageDeleted(nsIImapProtocol* aProtocol,
|
|||
if (affectedMessages.GetSize() > 0) // perhaps Search deleted these messages
|
||||
{
|
||||
GetDatabase();
|
||||
if (m_mailDatabase)
|
||||
m_mailDatabase->DeleteMessages(&affectedMessages, nsnull);
|
||||
if (mDatabase)
|
||||
mDatabase->DeleteMessages(&affectedMessages, nsnull);
|
||||
}
|
||||
|
||||
}
|
||||
else if (doomedKeyString) // && !imapDeleteIsMoveToTrash
|
||||
{
|
||||
GetDatabase();
|
||||
if (m_mailDatabase)
|
||||
SetIMAPDeletedFlag(m_mailDatabase, affectedMessages, nsnull);
|
||||
if (mDatabase)
|
||||
SetIMAPDeletedFlag(mDatabase, affectedMessages, nsnull);
|
||||
}
|
||||
PR_FREEIF(keyTokenString);
|
||||
return NS_OK;
|
||||
|
@ -1827,13 +1710,13 @@ nsImapMailFolder::GetMessageSizeFromDB(nsIImapProtocol* aProtocol,
|
|||
MessageSizeInfo* sizeInfo)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
if (sizeInfo && sizeInfo->id && m_mailDatabase)
|
||||
if (sizeInfo && sizeInfo->id && mDatabase)
|
||||
{
|
||||
PRUint32 key = atoi(sizeInfo->id);
|
||||
nsCOMPtr<nsIMsgDBHdr> mailHdr;
|
||||
NS_ASSERTION(sizeInfo->idIsUid, "ids must be uids to get message size");
|
||||
if (sizeInfo->idIsUid)
|
||||
rv = m_mailDatabase->GetMsgHdrForKey(key, getter_AddRefs(mailHdr));
|
||||
rv = mDatabase->GetMsgHdrForKey(key, getter_AddRefs(mailHdr));
|
||||
if (NS_SUCCEEDED(rv) && mailHdr)
|
||||
rv = mailHdr->GetMessageSize(&sizeInfo->size);
|
||||
}
|
||||
|
|
|
@ -19,12 +19,11 @@
|
|||
#define nsImapMailFolder_h__
|
||||
|
||||
#include "nsImapCore.h"
|
||||
#include "nsMsgFolder.h"
|
||||
#include "nsMsgDBFolder.h"
|
||||
#include "nsIImapMailFolderSink.h"
|
||||
#include "nsIImapMessageSink.h"
|
||||
#include "nsIImapExtensionSink.h"
|
||||
#include "nsIImapMiscellaneousSink.h"
|
||||
#include "nsIDBChangeListener.h"
|
||||
#include "nsICopyMessageListener.h"
|
||||
#include "nsIImapService.h"
|
||||
#include "nsIUrlListener.h"
|
||||
|
@ -36,13 +35,12 @@
|
|||
|
||||
class nsParseMailMessageState;
|
||||
|
||||
class nsImapMailFolder : public nsMsgFolder,
|
||||
class nsImapMailFolder : public nsMsgDBFolder,
|
||||
public nsIMsgImapMailFolder,
|
||||
public nsIImapMailFolderSink,
|
||||
public nsIImapMessageSink,
|
||||
public nsIImapExtensionSink,
|
||||
public nsIImapMiscellaneousSink,
|
||||
public nsIDBChangeListener,
|
||||
public nsICopyMessageListener,
|
||||
public nsIUrlListener
|
||||
{
|
||||
|
@ -64,10 +62,6 @@ public:
|
|||
NS_IMETHOD AddUnique(nsISupports* element);
|
||||
NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement);
|
||||
NS_IMETHOD GetMessages(nsIEnumerator* *result);
|
||||
NS_IMETHOD GetThreads(nsIEnumerator** threadEnumerator);
|
||||
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
|
||||
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
|
||||
|
||||
|
||||
NS_IMETHOD CreateSubfolder(const char *folderName);
|
||||
|
||||
|
@ -166,15 +160,6 @@ public:
|
|||
NS_IMETHOD GetMessageSizeFromDB(nsIImapProtocol* aProtocol,
|
||||
MessageSizeInfo* sizeInfo);
|
||||
|
||||
//nsIDBChangeListener
|
||||
NS_IMETHOD OnKeyChange(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnKeyDeleted(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnKeyAdded(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnAnnouncerGoingAway(nsIDBChangeAnnouncer * instigator);
|
||||
|
||||
//nsICopyMessageListener
|
||||
NS_IMETHOD BeginCopy(nsIMessage *message);
|
||||
NS_IMETHOD CopyData(nsIInputStream *aIStream, PRInt32 aLength);
|
||||
|
@ -269,7 +254,6 @@ protected:
|
|||
nsresult GetDatabase();
|
||||
|
||||
nsNativeFileSpec m_pathName;
|
||||
nsCOMPtr<nsIMsgDatabase> m_mailDatabase;
|
||||
PRBool m_initialized;
|
||||
PRBool m_haveDiscoverAllFolders;
|
||||
PRBool m_haveReadNameFromDB;
|
||||
|
|
|
@ -59,9 +59,9 @@ static NS_DEFINE_CID(kCPop3ServiceCID, NS_POP3SERVICE_CID);
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsMsgLocalMailFolder::nsMsgLocalMailFolder(void)
|
||||
: nsMsgFolder(), mExpungedBytes(0),
|
||||
: mExpungedBytes(0),
|
||||
mHaveReadNameFromDB(PR_FALSE), mGettingMail(PR_FALSE),
|
||||
mInitialized(PR_FALSE), mMailDatabase(nsnull)
|
||||
mInitialized(PR_FALSE)
|
||||
{
|
||||
mPath = nsnull;
|
||||
// NS_INIT_REFCNT(); done by superclass
|
||||
|
@ -69,9 +69,6 @@ nsMsgLocalMailFolder::nsMsgLocalMailFolder(void)
|
|||
|
||||
nsMsgLocalMailFolder::~nsMsgLocalMailFolder(void)
|
||||
{
|
||||
if(mMailDatabase)
|
||||
//Close releases db;
|
||||
mMailDatabase->Close(PR_TRUE);
|
||||
if (mPath)
|
||||
delete mPath;
|
||||
}
|
||||
|
@ -87,10 +84,6 @@ NS_IMETHODIMP nsMsgLocalMailFolder::QueryInterface(REFNSIID aIID, void** aInstan
|
|||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIMsgLocalMailFolder*, this);
|
||||
}
|
||||
else if (aIID.Equals(nsIDBChangeListener::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDBChangeListener*, this);
|
||||
}
|
||||
else if(aIID.Equals(nsICopyMessageListener::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsICopyMessageListener*, this);
|
||||
|
@ -341,7 +334,7 @@ nsMsgLocalMailFolder::ReplaceElement(nsISupports* element, nsISupports* newEleme
|
|||
//returns NS_OK. Otherwise returns a failure error value.
|
||||
nsresult nsMsgLocalMailFolder::GetDatabase()
|
||||
{
|
||||
if (mMailDatabase == nsnull)
|
||||
if (!mDatabase)
|
||||
{
|
||||
nsNativeFileSpec path;
|
||||
nsresult rv = GetPath(path);
|
||||
|
@ -353,12 +346,12 @@ nsresult nsMsgLocalMailFolder::GetDatabase()
|
|||
rv = nsComponentManager::CreateInstance(kCMailDB, nsnull, nsIMsgDatabase::GetIID(), getter_AddRefs(mailDBFactory));
|
||||
if (NS_SUCCEEDED(rv) && mailDBFactory)
|
||||
{
|
||||
folderOpen = mailDBFactory->Open(path, PR_TRUE, (nsIMsgDatabase **) &mMailDatabase, PR_FALSE);
|
||||
folderOpen = mailDBFactory->Open(path, PR_TRUE, getter_AddRefs(mDatabase), PR_FALSE);
|
||||
if(!NS_SUCCEEDED(folderOpen) &&
|
||||
folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING )
|
||||
{
|
||||
// if it's out of date then reopen with upgrade.
|
||||
if(!NS_SUCCEEDED(rv = mailDBFactory->Open(path, PR_TRUE, &mMailDatabase, PR_TRUE)))
|
||||
if(!NS_SUCCEEDED(rv = mailDBFactory->Open(path, PR_TRUE, getter_AddRefs(mDatabase), PR_TRUE)))
|
||||
{
|
||||
return rv;
|
||||
}
|
||||
|
@ -366,10 +359,10 @@ nsresult nsMsgLocalMailFolder::GetDatabase()
|
|||
|
||||
}
|
||||
|
||||
if(mMailDatabase)
|
||||
if(mDatabase)
|
||||
{
|
||||
|
||||
mMailDatabase->AddListener(this);
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
// if we have to regenerate the folder, run the parser url.
|
||||
if(folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_MISSING || folderOpen == NS_MSG_ERROR_FOLDER_SUMMARY_OUT_OF_DATE)
|
||||
|
@ -398,7 +391,7 @@ nsMsgLocalMailFolder::GetMessages(nsIEnumerator* *result)
|
|||
{
|
||||
nsCOMPtr<nsIEnumerator> msgHdrEnumerator;
|
||||
nsMessageFromMsgHdrEnumerator *messageEnumerator = nsnull;
|
||||
rv = mMailDatabase->EnumerateMessages(getter_AddRefs(msgHdrEnumerator));
|
||||
rv = mDatabase->EnumerateMessages(getter_AddRefs(msgHdrEnumerator));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = NS_NewMessageFromMsgHdrEnumerator(msgHdrEnumerator,
|
||||
this, &messageEnumerator);
|
||||
|
@ -407,59 +400,7 @@ nsMsgLocalMailFolder::GetMessages(nsIEnumerator* *result)
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::GetThreads(nsIEnumerator** threadEnumerator)
|
||||
{
|
||||
nsresult rv = GetDatabase();
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
return mMailDatabase->EnumerateThreads(threadEnumerator);
|
||||
else
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMsgLocalMailFolder::GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread)
|
||||
{
|
||||
nsresult rv = GetDatabase();
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMsgDBHdr> msgDBHdr;
|
||||
nsCOMPtr<nsIDBMessage> dbMessage(do_QueryInterface(message, &rv));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = mMailDatabase->GetThreadContainingMsgHdr(msgDBHdr, thread);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMsgLocalMailFolder::HasMessage(nsIMessage *message, PRBool *hasMessage)
|
||||
{
|
||||
if(!hasMessage)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv = GetDatabase();
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMsgDBHdr> msgDBHdr, msgDBHdrForKey;
|
||||
nsCOMPtr<nsIDBMessage> dbMessage(do_QueryInterface(message, &rv));
|
||||
nsMsgKey key;
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = msgDBHdr->GetMessageKey(&key);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = mMailDatabase->ContainsKey(key, hasMessage);
|
||||
|
||||
}
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::BuildFolderURL(char **url)
|
||||
{
|
||||
|
@ -1111,7 +1052,7 @@ NS_IMETHODIMP nsMsgLocalMailFolder::DeleteMessage(nsIMessage *message)
|
|||
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv =mMailDatabase->DeleteHeader(msgDBHdr, nsnull, PR_TRUE, PR_TRUE);
|
||||
rv =mDatabase->DeleteHeader(msgDBHdr, nsnull, PR_TRUE, PR_TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1183,62 +1124,6 @@ NS_IMETHODIMP nsMsgLocalMailFolder::GetNewMessages()
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::OnKeyChange(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::OnKeyDeleted(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsCOMPtr<nsIMsgDBHdr> pMsgDBHdr;
|
||||
nsresult rv = mMailDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(pMsgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMessage> message;
|
||||
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, getter_AddRefs(message));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsISupports> msgSupports(do_QueryInterface(message, &rv));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
NotifyItemDeleted(msgSupports);
|
||||
}
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::OnKeyAdded(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIMsgDBHdr> msgDBHdr;
|
||||
rv = mMailDatabase->GetMsgHdrForKey(aKeyChanged, getter_AddRefs(msgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMessage> message;
|
||||
rv = CreateMessageFromMsgDBHdr(msgDBHdr, getter_AddRefs(message));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsISupports> msgSupports;
|
||||
if(message && NS_SUCCEEDED(message->QueryInterface(kISupportsIID, getter_AddRefs(msgSupports))))
|
||||
{
|
||||
NotifyItemAdded(msgSupports);
|
||||
}
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::OnAnnouncerGoingAway(nsIDBChangeAnnouncer * instigator)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//nsICopyMessageListener
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::BeginCopy(nsIMessage *message)
|
||||
|
@ -1310,7 +1195,7 @@ NS_IMETHODIMP nsMsgLocalMailFolder::EndCopy(PRBool copySucceeded)
|
|||
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = mMailDatabase->CopyHdrFromExistingHdr(mCopyState->dstKey, msgDBHdr, getter_AddRefs(newHdr));
|
||||
rv = mDatabase->CopyHdrFromExistingHdr(mCopyState->dstKey, msgDBHdr, getter_AddRefs(newHdr));
|
||||
}
|
||||
|
||||
if(mCopyState->fileStream)
|
||||
|
|
|
@ -25,9 +25,8 @@
|
|||
#ifndef nsMsgLocalMailFolder_h__
|
||||
#define nsMsgLocalMailFolder_h__
|
||||
|
||||
#include "nsMsgFolder.h" /* include the interface we are going to support */
|
||||
#include "nsMsgDBFolder.h" /* include the interface we are going to support */
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsIDBChangeListener.h"
|
||||
#include "nsICopyMessageListener.h"
|
||||
#include "nsFileStream.h"
|
||||
|
||||
|
@ -37,9 +36,8 @@ typedef struct {
|
|||
nsMsgKey dstKey;
|
||||
} nsLocalMailCopyState;
|
||||
|
||||
class nsMsgLocalMailFolder : public nsMsgFolder,
|
||||
class nsMsgLocalMailFolder : public nsMsgDBFolder,
|
||||
public nsIMsgLocalMailFolder,
|
||||
public nsIDBChangeListener,
|
||||
public nsICopyMessageListener
|
||||
{
|
||||
public:
|
||||
|
@ -63,9 +61,6 @@ public:
|
|||
NS_IMETHOD AddUnique(nsISupports* element);
|
||||
NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement);
|
||||
NS_IMETHOD GetMessages(nsIEnumerator* *result);
|
||||
NS_IMETHOD GetThreads(nsIEnumerator** threadEnumerator);
|
||||
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
|
||||
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
|
||||
|
||||
|
||||
NS_IMETHOD CreateSubfolder(const char *folderName);
|
||||
|
@ -108,15 +103,6 @@ public:
|
|||
// nsIMsgMailFolder
|
||||
NS_IMETHOD GetPath(nsNativeFileSpec& aPathName);
|
||||
|
||||
//nsIDBChangeListener
|
||||
NS_IMETHOD OnKeyChange(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnKeyDeleted(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnKeyAdded(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnAnnouncerGoingAway(nsIDBChangeAnnouncer * instigator);
|
||||
|
||||
//nsICopyMessageListener
|
||||
NS_IMETHOD BeginCopy(nsIMessage *message);
|
||||
NS_IMETHOD CopyData(nsIInputStream *aIStream, PRInt32 aLength);
|
||||
|
@ -146,7 +132,6 @@ protected:
|
|||
PRBool mHaveReadNameFromDB;
|
||||
PRBool mGettingMail;
|
||||
PRBool mInitialized;
|
||||
nsIMsgDatabase* mMailDatabase; //Not an nsCOMPtr because we want to close it not release it
|
||||
nsLocalMailCopyState *mCopyState; //We will only allow one of these at a time
|
||||
};
|
||||
|
||||
|
|
|
@ -67,9 +67,9 @@ static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID);
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsMsgNewsFolder::nsMsgNewsFolder(void)
|
||||
: nsMsgFolder(), mExpungedBytes(0),
|
||||
: mExpungedBytes(0),
|
||||
mHaveReadNameFromDB(PR_FALSE), mGettingNews(PR_FALSE),
|
||||
mInitialized(PR_FALSE), mNewsDatabase(nsnull), m_optionLines(nsnull)
|
||||
mInitialized(PR_FALSE), m_optionLines(nsnull)
|
||||
{
|
||||
mPath = nsnull;
|
||||
// NS_INIT_REFCNT(); done by superclass
|
||||
|
@ -77,18 +77,14 @@ nsMsgNewsFolder::nsMsgNewsFolder(void)
|
|||
|
||||
nsMsgNewsFolder::~nsMsgNewsFolder(void)
|
||||
{
|
||||
if(mNewsDatabase)
|
||||
//Close releases db;
|
||||
mNewsDatabase->Close(PR_TRUE);
|
||||
|
||||
if (mPath)
|
||||
delete mPath;
|
||||
|
||||
PR_FREEIF(m_optionLines);
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsMsgNewsFolder, nsMsgFolder)
|
||||
NS_IMPL_RELEASE_INHERITED(nsMsgNewsFolder, nsMsgFolder)
|
||||
NS_IMPL_ADDREF_INHERITED(nsMsgNewsFolder, nsMsgDBFolder)
|
||||
NS_IMPL_RELEASE_INHERITED(nsMsgNewsFolder, nsMsgDBFolder)
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
|
@ -98,10 +94,6 @@ NS_IMETHODIMP nsMsgNewsFolder::QueryInterface(REFNSIID aIID, void** aInstancePtr
|
|||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIMsgNewsFolder*, this);
|
||||
}
|
||||
else if (aIID.Equals(nsIDBChangeListener::GetIID()))
|
||||
{
|
||||
*aInstancePtr = NS_STATIC_CAST(nsIDBChangeListener*, this);
|
||||
}
|
||||
|
||||
if(*aInstancePtr)
|
||||
{
|
||||
|
@ -498,7 +490,7 @@ nsMsgNewsFolder::ReplaceElement(nsISupports* element, nsISupports* newElement)
|
|||
//returns NS_OK. Otherwise returns a failure error value.
|
||||
nsresult nsMsgNewsFolder::GetDatabase()
|
||||
{
|
||||
if (mNewsDatabase == nsnull)
|
||||
if (mDatabase == nsnull)
|
||||
{
|
||||
nsNativeFileSpec path;
|
||||
nsresult rv = GetPath(path);
|
||||
|
@ -510,7 +502,7 @@ nsresult nsMsgNewsFolder::GetDatabase()
|
|||
rv = nsComponentManager::CreateInstance(kCNewsDB, nsnull, nsIMsgDatabase::GetIID(), (void **) &newsDBFactory);
|
||||
if (NS_SUCCEEDED(rv) && newsDBFactory)
|
||||
{
|
||||
folderOpen = newsDBFactory->Open(path, PR_TRUE, (nsIMsgDatabase **) &mNewsDatabase, PR_FALSE);
|
||||
folderOpen = newsDBFactory->Open(path, PR_TRUE, getter_AddRefs(mDatabase), PR_FALSE);
|
||||
#ifdef DEBUG_NOISY_NEWS
|
||||
if (NS_SUCCEEDED(folderOpen)) {
|
||||
printf ("newsDBFactory->Open() succeeded\n");
|
||||
|
@ -523,10 +515,10 @@ nsresult nsMsgNewsFolder::GetDatabase()
|
|||
NS_RELEASE(newsDBFactory);
|
||||
}
|
||||
|
||||
if(mNewsDatabase)
|
||||
if(mDatabase)
|
||||
{
|
||||
|
||||
mNewsDatabase->AddListener(this);
|
||||
mDatabase->AddListener(this);
|
||||
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
|
@ -543,7 +535,7 @@ nsMsgNewsFolder::GetMessages(nsIEnumerator* *result)
|
|||
{
|
||||
nsIEnumerator *msgHdrEnumerator = nsnull;
|
||||
nsMessageFromMsgHdrEnumerator *messageEnumerator = nsnull;
|
||||
rv = mNewsDatabase->EnumerateMessages(&msgHdrEnumerator);
|
||||
rv = mDatabase->EnumerateMessages(&msgHdrEnumerator);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = NS_NewMessageFromMsgHdrEnumerator(msgHdrEnumerator,
|
||||
this, &messageEnumerator);
|
||||
|
@ -553,62 +545,6 @@ nsMsgNewsFolder::GetMessages(nsIEnumerator* *result)
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::GetThreads(nsIEnumerator** threadEnumerator)
|
||||
{
|
||||
nsresult rv = GetDatabase();
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
return mNewsDatabase->EnumerateThreads(threadEnumerator);
|
||||
else
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMsgNewsFolder::GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread)
|
||||
{
|
||||
nsresult rv = GetDatabase();
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsIMsgDBHdr *msgDBHdr = nsnull;
|
||||
//We know from our factory that news message resources are going to be
|
||||
//nsNewsMessages.
|
||||
nsNewsMessage *newsMessage = NS_STATIC_CAST(nsNewsMessage*, message);
|
||||
rv = newsMessage->GetMsgDBHdr(&msgDBHdr);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = mNewsDatabase->GetThreadContainingMsgHdr(msgDBHdr, thread);
|
||||
NS_IF_RELEASE(msgDBHdr);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
//This needs to be moved up into common base class.
|
||||
NS_IMETHODIMP
|
||||
nsMsgNewsFolder::HasMessage(nsIMessage *message, PRBool *hasMessage)
|
||||
{
|
||||
if(!hasMessage)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv = GetDatabase();
|
||||
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIMsgDBHdr> msgDBHdr, msgDBHdrForKey;
|
||||
nsCOMPtr<nsIDBMessage> dbMessage(do_QueryInterface(message, &rv));
|
||||
nsMsgKey key;
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = dbMessage->GetMsgDBHdr(getter_AddRefs(msgDBHdr));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = msgDBHdr->GetMessageKey(&key);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
rv = mNewsDatabase->ContainsKey(key, hasMessage);
|
||||
|
||||
}
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::BuildFolderURL(char **url)
|
||||
{
|
||||
|
@ -1056,7 +992,7 @@ NS_IMETHODIMP nsMsgNewsFolder::DeleteMessage(nsIMessage *message)
|
|||
rv = newsMessage->GetMsgDBHdr(&msgDBHdr);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv =mNewsDatabase->DeleteHeader(msgDBHdr, nsnull, PR_TRUE, PR_TRUE);
|
||||
rv =mDatabase->DeleteHeader(msgDBHdr, nsnull, PR_TRUE, PR_TRUE);
|
||||
NS_IF_RELEASE(msgDBHdr);
|
||||
}
|
||||
}
|
||||
|
@ -1139,74 +1075,6 @@ NS_IMETHODIMP nsMsgNewsFolder::CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgDBHdr,
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::OnKeyChange(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::OnKeyDeleted(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsIMsgDBHdr *pMsgDBHdr;
|
||||
nsresult rv = mNewsDatabase->GetMsgHdrForKey(aKeyChanged, &pMsgDBHdr);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsIMessage *message = nsnull;
|
||||
rv = CreateMessageFromMsgDBHdr(pMsgDBHdr, &message);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
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_IF_RELEASE(msgSupports);
|
||||
}
|
||||
NS_IF_RELEASE(message);
|
||||
UpdateSummaryTotals();
|
||||
}
|
||||
NS_IF_RELEASE(pMsgDBHdr);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::OnKeyAdded(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator)
|
||||
{
|
||||
nsIMsgDBHdr *pMsgDBHdr;
|
||||
nsresult rv = mNewsDatabase->GetMsgHdrForKey(aKeyChanged, &pMsgDBHdr);
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
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);
|
||||
}
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgNewsFolder::OnAnnouncerGoingAway(nsIDBChangeAnnouncer * instigator)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* sspitzer: from mozilla/network/protocol/pop3/mkpop3.c */
|
||||
|
||||
|
|
|
@ -25,9 +25,8 @@
|
|||
#ifndef nsMsgNewsFolder_h__
|
||||
#define nsMsgNewsFolder_h__
|
||||
|
||||
#include "nsMsgFolder.h" /* include the interface we are going to support */
|
||||
#include "nsMsgDBFolder.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsIDBChangeListener.h"
|
||||
#include "nsFileStream.h"
|
||||
|
||||
/*
|
||||
|
@ -52,7 +51,7 @@
|
|||
|
||||
#endif /* ! XP_UNIX */
|
||||
|
||||
class nsMsgNewsFolder : public nsMsgFolder, public nsIMsgNewsFolder, public nsIDBChangeListener
|
||||
class nsMsgNewsFolder : public nsMsgDBFolder, public nsIMsgNewsFolder
|
||||
{
|
||||
public:
|
||||
nsMsgNewsFolder(void);
|
||||
|
@ -72,10 +71,6 @@ public:
|
|||
NS_IMETHOD AddUnique(nsISupports* element);
|
||||
NS_IMETHOD ReplaceElement(nsISupports* element, nsISupports* newElement);
|
||||
NS_IMETHOD GetMessages(nsIEnumerator* *result);
|
||||
NS_IMETHOD GetThreads(nsIEnumerator** threadEnumerator);
|
||||
NS_IMETHOD GetThreadForMessage(nsIMessage *message, nsIMsgThread **thread);
|
||||
NS_IMETHOD HasMessage(nsIMessage *message, PRBool *hasMessage);
|
||||
|
||||
|
||||
NS_IMETHOD CreateSubfolder(const char *folderName);
|
||||
|
||||
|
@ -117,15 +112,6 @@ public:
|
|||
// nsIMsgNewsFolder
|
||||
NS_IMETHOD GetPath(nsNativeFileSpec& aPathName);
|
||||
|
||||
//nsIDBChangeListener
|
||||
NS_IMETHOD OnKeyChange(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnKeyDeleted(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnKeyAdded(nsMsgKey aKeyChanged, PRInt32 aFlags,
|
||||
nsIDBChangeListener * aInstigator);
|
||||
NS_IMETHOD OnAnnouncerGoingAway(nsIDBChangeAnnouncer * instigator);
|
||||
|
||||
protected:
|
||||
nsresult ParseFolder(nsFileSpec& path);
|
||||
nsresult CreateSubFolders(nsFileSpec &path);
|
||||
|
@ -159,7 +145,6 @@ protected:
|
|||
PRBool mGettingNews;
|
||||
PRBool mInitialized;
|
||||
nsISupportsArray *mMessages;
|
||||
nsIMsgDatabase* mNewsDatabase;
|
||||
char *m_optionLines;
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче