From 702224fff3d3cece9d5420a66e6cacd518a902b3 Mon Sep 17 00:00:00 2001 From: "neil%parkwaycc.co.uk" Date: Thu, 20 Mar 2008 18:04:47 +0000 Subject: [PATCH] Bug 413413 Replace nsMsgKey/UInt32Array with nsTArray r=dwitte sr=bienvenu --- mailnews/base/public/nsIMsgMessageService.idl | 5 +- .../base/search/src/nsMsgFilterService.cpp | 22 +- mailnews/base/search/src/nsMsgSearchNews.cpp | 21 +- mailnews/base/search/src/nsMsgSearchNews.h | 8 +- mailnews/base/src/nsMsgCopyService.cpp | 1 - mailnews/base/src/nsMsgDBView.cpp | 100 ++++----- mailnews/base/src/nsMsgDBView.h | 22 +- mailnews/base/src/nsMsgFolderCompactor.cpp | 5 +- mailnews/base/src/nsMsgFolderCompactor.h | 2 +- mailnews/base/src/nsMsgGroupThread.cpp | 22 +- mailnews/base/src/nsMsgGroupThread.h | 5 +- mailnews/base/src/nsMsgGroupView.cpp | 22 +- mailnews/base/src/nsMsgQuickSearchDBView.cpp | 48 ++--- mailnews/base/src/nsMsgQuickSearchDBView.h | 2 +- mailnews/base/src/nsMsgSearchDBView.cpp | 6 +- mailnews/base/src/nsMsgThreadedDBView.cpp | 30 ++- mailnews/base/src/nsMsgThreadedDBView.h | 2 +- .../base/src/nsMsgXFVirtualFolderDBView.cpp | 17 +- mailnews/base/util/Makefile.in | 4 - mailnews/base/util/nsImapMoveCoalescer.cpp | 22 +- mailnews/base/util/nsImapMoveCoalescer.h | 10 +- mailnews/base/util/nsMsgDBFolder.cpp | 35 ++-- mailnews/base/util/nsMsgDBFolder.h | 4 +- mailnews/base/util/nsMsgKeyArray.cpp | 0 mailnews/base/util/nsMsgKeyArray.h | 0 mailnews/base/util/nsMsgKeySet.cpp | 14 +- mailnews/base/util/nsMsgKeySet.h | 7 +- mailnews/base/util/nsUInt32Array.cpp | 0 mailnews/base/util/nsUInt32Array.h | 0 mailnews/compose/src/nsMsgCompose.cpp | 6 +- mailnews/db/msgdb/public/nsDBFolderInfo.h | 4 +- mailnews/db/msgdb/public/nsIMsgDatabase.idl | 6 +- mailnews/db/msgdb/public/nsMailDatabase.h | 8 +- mailnews/db/msgdb/public/nsMsgDatabase.h | 6 +- mailnews/db/msgdb/public/nsNewsDatabase.h | 4 +- mailnews/db/msgdb/src/nsMailDatabase.cpp | 12 +- mailnews/db/msgdb/src/nsMsgDatabase.cpp | 95 +++++---- mailnews/db/msgdb/src/nsNewsDatabase.cpp | 2 +- mailnews/imap/src/nsImapFlagAndUidState.cpp | 8 +- mailnews/imap/src/nsImapFlagAndUidState.h | 5 +- mailnews/imap/src/nsImapMailFolder.cpp | 192 +++++++++--------- mailnews/imap/src/nsImapMailFolder.h | 14 +- mailnews/imap/src/nsImapOfflineSync.cpp | 58 +++--- mailnews/imap/src/nsImapOfflineSync.h | 2 +- mailnews/imap/src/nsImapProtocol.cpp | 12 +- .../imap/src/nsImapServerResponseParser.h | 5 +- mailnews/imap/src/nsImapService.cpp | 6 +- mailnews/imap/src/nsImapUndoTxn.cpp | 24 +-- mailnews/imap/src/nsImapUndoTxn.h | 14 +- mailnews/imap/src/nsImapUtils.cpp | 6 +- mailnews/imap/src/nsImapUtils.h | 5 +- mailnews/local/src/nsLocalMailFolder.cpp | 25 ++- mailnews/local/src/nsLocalMailFolder.h | 4 +- mailnews/local/src/nsLocalUndoTxn.cpp | 16 +- mailnews/local/src/nsLocalUndoTxn.h | 8 +- mailnews/local/src/nsMailboxService.cpp | 7 +- mailnews/local/src/nsMailboxUrl.cpp | 9 +- mailnews/local/src/nsMailboxUrl.h | 5 +- mailnews/local/src/nsParseMailbox.h | 1 - mailnews/mapi/mapihook/src/msgMapiImp.cpp | 4 +- mailnews/news/src/nsNNTPArticleList.cpp | 16 +- mailnews/news/src/nsNNTPArticleList.h | 9 +- mailnews/news/src/nsNewsDownloader.cpp | 18 +- mailnews/news/src/nsNewsDownloader.h | 4 +- mailnews/news/src/nsNewsFolder.cpp | 9 +- mailnews/news/src/nsNntpService.cpp | 2 +- 66 files changed, 515 insertions(+), 552 deletions(-) delete mode 100644 mailnews/base/util/nsMsgKeyArray.cpp delete mode 100644 mailnews/base/util/nsMsgKeyArray.h delete mode 100644 mailnews/base/util/nsUInt32Array.cpp delete mode 100644 mailnews/base/util/nsUInt32Array.h diff --git a/mailnews/base/public/nsIMsgMessageService.idl b/mailnews/base/public/nsIMsgMessageService.idl index bcbe20672be..5fb328a1a1e 100644 --- a/mailnews/base/public/nsIMsgMessageService.idl +++ b/mailnews/base/public/nsIMsgMessageService.idl @@ -48,10 +48,11 @@ interface nsIMsgDBHdr; interface nsIStreamConverter; %{C++ -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" %} -[ref] native nsMsgKeyArrayRef(nsMsgKeyArray); +[ref] native nsMsgKeyArrayRef(nsTArray); [scriptable, uuid(e39c2eab-ad6c-4560-b642-7f98ba2c0c35)] diff --git a/mailnews/base/search/src/nsMsgFilterService.cpp b/mailnews/base/search/src/nsMsgFilterService.cpp index 7cef2e44321..4266f580a29 100644 --- a/mailnews/base/search/src/nsMsgFilterService.cpp +++ b/mailnews/base/search/src/nsMsgFilterService.cpp @@ -295,7 +295,7 @@ protected: PRUint32 m_curFolderIndex; PRUint32 m_numFilters; PRUint32 m_numFolders; - nsMsgKeyArray m_searchHits; + nsTArray m_searchHits; nsCOMPtr m_searchHitHdrs; nsCOMPtr m_searchSession; }; @@ -410,7 +410,7 @@ NS_IMETHODIMP nsMsgFilterAfterTheFact::OnSearchHit(nsIMsgDBHdr *header, nsIMsgFo NS_ENSURE_ARG_POINTER(header); nsMsgKey msgKey; header->GetMessageKey(&msgKey); - m_searchHits.Add(msgKey); + m_searchHits.AppendElement(msgKey); m_searchHitHdrs->AppendElement(header); return NS_OK; } @@ -423,14 +423,14 @@ NS_IMETHODIMP nsMsgFilterAfterTheFact::OnSearchDone(nsresult status) continueExecution = ContinueExecutionPrompt(); if (continueExecution) - return (m_searchHits.GetSize() > 0) ? ApplyFilter() : RunNextFilter(); + return m_searchHits.IsEmpty() ? RunNextFilter() : ApplyFilter(); else return OnEndExecution(rv); } NS_IMETHODIMP nsMsgFilterAfterTheFact::OnNewSearch() { - m_searchHits.RemoveAll(); + m_searchHits.Clear(); m_searchHitHdrs->Clear(); return NS_OK; } @@ -478,7 +478,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() if (loggingEnabled) { - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); @@ -560,7 +560,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() case nsMsgFilterAction::KillThread: case nsMsgFilterAction::WatchThread: { - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); @@ -585,7 +585,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() { nsMsgPriorityValue filterPriority; filterAction->GetPriority(&filterPriority); - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); @@ -629,7 +629,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() nsCOMPtr compService = do_GetService (NS_MSGCOMPOSESERVICE_CONTRACTID) ; if (compService) { - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); @@ -654,7 +654,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() nsCOMPtr compService = do_GetService (NS_MSGCOMPOSESERVICE_CONTRACTID) ; if (compService) { - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); @@ -676,7 +676,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() nsCOMPtr partialMsgs; // Delete the partial headers. They're useless now // that the server copy is being deleted. - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); @@ -705,7 +705,7 @@ nsresult nsMsgFilterAfterTheFact::ApplyFilter() { nsCOMPtr messages = do_CreateInstance(NS_SUPPORTSARRAY_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.GetSize(); msgIndex++) + for (PRUint32 msgIndex = 0; msgIndex < m_searchHits.Length(); msgIndex++) { nsCOMPtr msgHdr; m_searchHitHdrs->QueryElementAt(msgIndex, NS_GET_IID(nsIMsgDBHdr), getter_AddRefs(msgHdr)); diff --git a/mailnews/base/search/src/nsMsgSearchNews.cpp b/mailnews/base/search/src/nsMsgSearchNews.cpp index 6b968a4a960..0ef462fab22 100644 --- a/mailnews/base/search/src/nsMsgSearchNews.cpp +++ b/mailnews/base/search/src/nsMsgSearchNews.cpp @@ -322,7 +322,7 @@ nsresult nsMsgSearchNews::Encode (nsCString *outEncoding) NS_IMETHODIMP nsMsgSearchNews::AddHit(nsMsgKey key) { - m_candidateHits.Add (key); + m_candidateHits.AppendElement(key); return NS_OK; } @@ -363,13 +363,13 @@ void nsMsgSearchNews::CollateHits() // entire query is the intersection of results for each XPAT command if an AND search, // otherwise we want the union of all the search hits (minus the duplicates of course). - PRUint32 size = m_candidateHits.GetSize(); + PRUint32 size = m_candidateHits.Length(); if (!size) return; // Sort the article numbers first, so it's easy to tell how many hits // on a given article we got - m_candidateHits.QuickSort(CompareArticleNumbers); + m_candidateHits.Sort(); // For an OR search we only need to count the first occurrence of a candidate. PRUint32 termCount = 1; @@ -397,7 +397,7 @@ void nsMsgSearchNews::CollateHits() candidate = possibleCandidate; } if (candidateCount == termCount) - m_hits.Add(candidate); + m_hits.AppendElement(candidate); } } @@ -415,7 +415,7 @@ void nsMsgSearchNews::ReportHits () if (db) { - PRUint32 size = m_hits.GetSize(); + PRUint32 size = m_hits.Length(); for (PRUint32 i = 0; i < size; ++i) { nsCOMPtr header; @@ -442,17 +442,6 @@ void nsMsgSearchNews::ReportHit (nsIMsgDBHdr *pHeaders, nsIMsgFolder *folder) session->AddSearchHit (pHeaders, scopeFolder); } - - -int PR_CALLBACK nsMsgSearchNews::CompareArticleNumbers (const void *v1, const void *v2, void *data) -{ - // QuickSort callback to compare article numbers - - uint32 i1 = *(uint32*) v1; - uint32 i2 = *(uint32*) v2; - return i1 - i2; -} - nsresult nsMsgSearchValidityManager::InitNewsTable() { NS_ASSERTION (nsnull == m_newsTable,"don't call this twice!"); diff --git a/mailnews/base/search/src/nsMsgSearchNews.h b/mailnews/base/search/src/nsMsgSearchNews.h index 39df7237d12..2b5456e3c45 100644 --- a/mailnews/base/search/src/nsMsgSearchNews.h +++ b/mailnews/base/search/src/nsMsgSearchNews.h @@ -37,7 +37,8 @@ #ifndef _nsMsgSearchNews_h__ #include "nsMsgSearchAdapter.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" //----------------------------------------------------------------------------- //---------- Adapter class for searching online (news) folders ---------------- @@ -62,14 +63,13 @@ public: void ReportHits (); void CollateHits (); void ReportHit (nsIMsgDBHdr *pHeaders, nsIMsgFolder *folder); - static int PR_CALLBACK CompareArticleNumbers (const void *v1, const void *v2, void *data); protected: nsCString m_encoding; PRBool m_ORSearch; // set to true if any of the search terms contains an OR for a boolean operator. - nsMsgKeyArray m_candidateHits; - nsMsgKeyArray m_hits; + nsTArray m_candidateHits; + nsTArray m_hits; static const char *m_kNntpFrom; static const char *m_kNntpSubject; diff --git a/mailnews/base/src/nsMsgCopyService.cpp b/mailnews/base/src/nsMsgCopyService.cpp index 74ef9f9acab..176b1e95229 100644 --- a/mailnews/base/src/nsMsgCopyService.cpp +++ b/mailnews/base/src/nsMsgCopyService.cpp @@ -37,7 +37,6 @@ * ***** END LICENSE BLOCK ***** */ #include "nsMsgCopyService.h" -#include "nsMsgKeyArray.h" #include "nsCOMArray.h" #include "nspr.h" #include "nsIFile.h" diff --git a/mailnews/base/src/nsMsgDBView.cpp b/mailnews/base/src/nsMsgDBView.cpp index e6bdaeeeebd..71026e66dac 100644 --- a/mailnews/base/src/nsMsgDBView.cpp +++ b/mailnews/base/src/nsMsgDBView.cpp @@ -737,7 +737,7 @@ nsresult nsMsgDBView::FetchLabel(nsIMsgDBHdr *aHdr, nsAString &aLabelString) /*if you call SaveAndClearSelection make sure to call RestoreSelection otherwise m_saveRestoreSelectionDepth will be incorrect and will lead to selection msg problems*/ -nsresult nsMsgDBView::SaveAndClearSelection(nsMsgKey *aCurrentMsgKey, nsMsgKeyArray &aMsgKeyArray) +nsresult nsMsgDBView::SaveAndClearSelection(nsMsgKey *aCurrentMsgKey, nsTArray &aMsgKeyArray) { // we don't do anything on nested Save / Restore calls. m_saveRestoreSelectionDepth++; @@ -764,7 +764,7 @@ nsresult nsMsgDBView::SaveAndClearSelection(nsMsgKey *aCurrentMsgKey, nsMsgKeyAr nsMsgViewIndexArray selection; GetSelectedIndices(selection); PRInt32 numIndices = selection.Length(); - aMsgKeyArray.SetSize(numIndices); + aMsgKeyArray.SetLength(numIndices); // now store the msg key for each selected item. nsMsgKey msgKey; @@ -781,7 +781,7 @@ nsresult nsMsgDBView::SaveAndClearSelection(nsMsgKey *aCurrentMsgKey, nsMsgKeyAr return NS_OK; } -nsresult nsMsgDBView::RestoreSelection(nsMsgKey aCurrentMsgKey, nsMsgKeyArray &aMsgKeyArray) +nsresult nsMsgDBView::RestoreSelection(nsMsgKey aCurrentMsgKey, nsTArray &aMsgKeyArray) { // we don't do anything on nested Save / Restore calls. m_saveRestoreSelectionDepth--; @@ -792,7 +792,7 @@ nsresult nsMsgDBView::RestoreSelection(nsMsgKey aCurrentMsgKey, nsMsgKeyArray &a return NS_OK; // turn our message keys into corresponding view indices - PRInt32 arraySize = aMsgKeyArray.GetSize(); + PRInt32 arraySize = aMsgKeyArray.Length(); nsMsgViewIndex currentViewPosition = nsMsgViewIndex_None; nsMsgViewIndex newViewPosition = nsMsgViewIndex_None; @@ -2023,7 +2023,7 @@ NS_IMETHODIMP nsMsgDBView::Close() PRInt32 oldSize = GetSize(); // this is important, because the tree will ask us for our // row count, which get determine from the number of keys. - m_keys.RemoveAll(); + m_keys.Clear(); // be consistent m_flags.Clear(); m_levels.Clear(); @@ -2491,7 +2491,7 @@ nsMsgDBView::ApplyCommandToIndices(nsMsgViewCommandTypeValue command, nsMsgViewI if (command == nsMsgViewCommandType::deleteNoTrash) return DeleteMessages(msgWindow, indices, numIndices, PR_TRUE); - nsMsgKeyArray imapUids; + nsTArray imapUids; nsCOMPtr imapFolder = do_QueryInterface(folder); PRBool thisIsImapFolder = (imapFolder != nsnull); nsCOMPtr junkPlugin; @@ -2544,7 +2544,7 @@ nsMsgDBView::ApplyCommandToIndices(nsMsgViewCommandTypeValue command, nsMsgViewI folder->EnableNotifications(nsIMsgFolder::allMessageCountNotifications, PR_FALSE, PR_TRUE /*dbBatching*/); if (thisIsImapFolder && command != nsMsgViewCommandType::markThreadRead) - imapUids.SetSize(numIndices); + imapUids.SetLength(numIndices); for (int32 i = 0; i < numIndices; i++) { @@ -2632,13 +2632,13 @@ nsMsgDBView::ApplyCommandToIndices(nsMsgViewCommandTypeValue command, nsMsgViewI return imapFolder->StoreCustomKeywords(msgWindow, NS_LITERAL_CSTRING("Junk"), NS_LITERAL_CSTRING("NonJunk"), - imapUids.GetArray(), imapUids.GetSize(), + imapUids.Elements(), imapUids.Length(), nsnull); case nsMsgViewCommandType::unjunk: return imapFolder->StoreCustomKeywords(msgWindow, NS_LITERAL_CSTRING("NonJunk"), NS_LITERAL_CSTRING("Junk"), - imapUids.GetArray(), imapUids.GetSize(), + imapUids.Elements(), imapUids.Length(), nsnull); default: @@ -2646,7 +2646,7 @@ nsMsgDBView::ApplyCommandToIndices(nsMsgViewCommandTypeValue command, nsMsgViewI } if (flags != kNoImapMsgFlag) // can't get here without thisIsImapThreadPane == TRUE - imapFolder->StoreImapFlags(flags, addFlags, imapUids.GetArray(), imapUids.GetSize(), nsnull); + imapFolder->StoreImapFlags(flags, addFlags, imapUids.Elements(), imapUids.Length(), nsnull); } @@ -2661,7 +2661,7 @@ nsresult nsMsgDBView::RemoveByIndex(nsMsgViewIndex index) { if (!IsValidIndex(index)) return NS_MSG_INVALID_DBVIEW_INDEX; - m_keys.RemoveAt(index); + m_keys.RemoveElementAt(index); m_flags.RemoveElementAt(index); m_levels.RemoveElementAt(index); @@ -2806,7 +2806,7 @@ nsresult nsMsgDBView::SetReadByIndex(nsMsgViewIndex index, PRBool read) return rv; } -nsresult nsMsgDBView::SetThreadOfMsgReadByIndex(nsMsgViewIndex index, nsMsgKeyArray &keysMarkedRead, PRBool /*read*/) +nsresult nsMsgDBView::SetThreadOfMsgReadByIndex(nsMsgViewIndex index, nsTArray &keysMarkedRead, PRBool /*read*/) { nsresult rv; @@ -3138,13 +3138,13 @@ nsMsgDBView::DetermineActionsForJunkMsgs(PRBool* movingJunkMessages, PRBool* mar nsresult nsMsgDBView::ReverseThreads() { nsTArray newFlagArray; - nsMsgKeyArray newKeyArray; + nsTArray newKeyArray; nsTArray newLevelArray; PRInt32 sourceIndex, destIndex; PRInt32 viewSize = GetSize(); - newKeyArray.SetSize(m_keys.GetSize()); + newKeyArray.SetLength(m_keys.Length()); newFlagArray.SetLength(m_flags.Length()); newLevelArray.SetLength(m_levels.Length()); @@ -3178,10 +3178,7 @@ nsresult nsMsgDBView::ReverseThreads() } sourceIndex = saveEndThread + 1; } - // this copies the contents of both arrays - it would be cheaper to - // just assign the new data ptrs to the old arrays and "forget" the new - // arrays' data ptrs, so they won't be freed when the arrays are deleted. - m_keys.CopyArray(newKeyArray); + m_keys.SwapElements(newKeyArray); m_flags.SwapElements(newFlagArray); m_levels.SwapElements(newLevelArray); @@ -4170,22 +4167,14 @@ nsMsgViewIndex nsMsgDBView::FindHdr(nsIMsgDBHdr *msgHdr) return FindViewIndex(msgKey); } -nsMsgKey nsMsgDBView::GetAt(nsMsgViewIndex index) -{ - if (index >= m_keys.GetSize() || index == nsMsgViewIndex_None) - return nsMsgKey_None; - else - return(m_keys[index]); -} - nsMsgViewIndex nsMsgDBView::FindKey(nsMsgKey key, PRBool expand) { nsMsgViewIndex retIndex = nsMsgViewIndex_None; - retIndex = (nsMsgViewIndex) (m_keys.FindIndex(key)); + retIndex = (nsMsgViewIndex) (m_keys.IndexOf(key)); // for dummy headers, try to expand if the caller says so. And if the thread is // expanded, ignore the dummy header and return the real header index. if (retIndex != nsMsgViewIndex_None && m_flags[retIndex] & MSG_VIEW_FLAG_DUMMY && !(m_flags[retIndex] & MSG_FLAG_ELIDED)) - return (nsMsgViewIndex) m_keys.FindIndex(key, retIndex + 1); + return (nsMsgViewIndex) m_keys.IndexOf(key, retIndex + 1); if (key != nsMsgKey_None && (retIndex == nsMsgViewIndex_None || m_flags[retIndex] & MSG_VIEW_FLAG_DUMMY) && expand && m_db) { @@ -4198,7 +4187,7 @@ nsMsgViewIndex nsMsgDBView::FindKey(nsMsgKey key, PRBool expand) PRUint32 flags = m_flags[threadIndex]; if ((flags & MSG_FLAG_ELIDED) && NS_SUCCEEDED(ExpandByIndex(threadIndex, nsnull)) || (flags & MSG_VIEW_FLAG_DUMMY)) - retIndex = (nsMsgViewIndex) m_keys.FindIndex(key, threadIndex + 1); + retIndex = (nsMsgViewIndex) m_keys.IndexOf(key, threadIndex + 1); } } } @@ -4245,7 +4234,7 @@ nsresult nsMsgDBView::ExpansionDelta(nsMsgViewIndex index, PRInt32 *expansionDel nsresult rv; *expansionDelta = 0; - if ( index > ((nsMsgViewIndex) m_keys.GetSize())) + if (index >= ((nsMsgViewIndex) m_keys.Length())) return NS_MSG_MESSAGE_NOT_FOUND; char flags = m_flags[index]; @@ -4399,7 +4388,7 @@ nsresult nsMsgDBView::ExpandByIndex(nsMsgViewIndex index, PRUint32 *pNumExpanded NS_ASSERTION(flags & MSG_FLAG_ELIDED, "can't expand an already expanded thread"); flags &= ~MSG_FLAG_ELIDED; - if ((PRUint32) index > m_keys.GetSize()) + if ((PRUint32) index > m_keys.Length()) return NS_MSG_MESSAGE_NOT_FOUND; firstIdInThread = m_keys[index]; @@ -4455,7 +4444,7 @@ nsresult nsMsgDBView::CollapseByIndex(nsMsgViewIndex index, PRUint32 *pNumCollap return NS_OK; flags |= MSG_FLAG_ELIDED; - if (index > m_keys.GetSize()) + if (index > m_keys.Length()) return NS_MSG_MESSAGE_NOT_FOUND; firstIdInThread = m_keys[index]; @@ -4476,10 +4465,7 @@ nsresult nsMsgDBView::CollapseByIndex(nsMsgViewIndex index, PRUint32 *pNumCollap PRInt32 numRemoved = threadCount; // don't count first header in thread NoteStartChange(index + 1, -numRemoved, nsMsgViewNotificationCode::insertOrDelete); // start at first id after thread. - for (int i = 1; i <= threadCount && index + 1 < m_keys.GetSize(); i++) - { - m_keys.RemoveAt(index + 1); - } + m_keys.RemoveElementsAt(index + 1, threadCount); m_flags.RemoveElementsAt(index + 1, threadCount); m_levels.RemoveElementsAt(index + 1, threadCount); if (pNumCollapsed != nsnull) @@ -4568,10 +4554,10 @@ nsMsgViewIndex nsMsgDBView::GetIndexForThread(nsIMsgDBHdr *hdr) return retIndex; } -nsMsgViewIndex nsMsgDBView::GetInsertIndexHelper(nsIMsgDBHdr *msgHdr, nsMsgKeyArray &keys, +nsMsgViewIndex nsMsgDBView::GetInsertIndexHelper(nsIMsgDBHdr *msgHdr, nsTArray &keys, nsMsgViewSortOrderValue sortOrder, nsMsgViewSortTypeValue sortType) { - nsMsgViewIndex highIndex = keys.GetSize(); + nsMsgViewIndex highIndex = keys.Length(); nsMsgViewIndex lowIndex = 0; IdKeyPtr EntryInfo1, EntryInfo2; EntryInfo1.key = nsnull; @@ -4691,7 +4677,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) { PRUint32 flags = 0; #ifdef DEBUG_bienvenu - NS_ASSERTION(m_keys.GetSize() == m_flags.Length() && m_keys.GetSize() == m_levels.Length(), "view arrays out of sync!"); + NS_ASSERTION(m_keys.Length() == m_flags.Length() && (int) m_keys.Length() == m_levels.Length(), "view arrays out of sync!"); #endif if (!GetShowingIgnored()) @@ -4724,7 +4710,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) if (m_sortOrder == nsMsgViewSortOrder::ascending) { - m_keys.Add(msgKey); + m_keys.AppendElement(msgKey); m_flags.AppendElement(flags); m_levels.AppendElement(levelToAdd); @@ -4734,7 +4720,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) } else { - m_keys.InsertAt(0, msgKey); + m_keys.InsertElementAt(0, msgKey); m_flags.InsertElementAt(0, flags); m_levels.InsertElementAt(0, levelToAdd); @@ -4746,7 +4732,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) } else { - m_keys.InsertAt(insertIndex, msgKey); + m_keys.InsertElementAt(insertIndex, msgKey); m_flags.InsertElementAt(insertIndex, flags); PRInt32 level = 0; m_levels.InsertElementAt(insertIndex, level); @@ -4769,7 +4755,7 @@ nsMsgViewIndex nsMsgDBView::FindParentInThread(nsMsgKey parentKey, nsMsgViewInde nsCOMPtr msgHdr; while (parentKey != nsMsgKey_None) { - nsMsgViewIndex parentIndex = m_keys.FindIndex(parentKey, startOfThreadViewIndex); + nsMsgViewIndex parentIndex = m_keys.IndexOf(parentKey, startOfThreadViewIndex); if (parentIndex != nsMsgViewIndex_None) return parentIndex; @@ -4844,7 +4830,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st PRUint32 numChildren; threadHdr->GetNumChildren(&numChildren); numChildren--; // account for the existing thread root - m_keys.InsertAt(viewIndex, 0, numChildren); + m_keys.InsertElementsAt(viewIndex, numChildren, 0); m_flags.InsertElementsAt(viewIndex, numChildren, 0); m_levels.InsertElementsAt(viewIndex, numChildren, 1); // default unthreaded level @@ -4882,7 +4868,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st if (*pNumListed < numChildren) { NS_NOTREACHED("thread corrupt in db"); - m_keys.RemoveAt(viewIndex, numChildren - *pNumListed); + m_keys.RemoveElementsAt(viewIndex, numChildren - *pNumListed); m_flags.RemoveElementsAt(viewIndex, numChildren - *pNumListed); m_levels.RemoveElementsAt(viewIndex, numChildren - *pNumListed); // if we've listed fewer messages than are in the thread, then the db @@ -4967,7 +4953,7 @@ nsresult nsMsgDBView::ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIn m_db->MarkHdrRead(msgHdr, PR_FALSE, nsnull); if (msgKey != topLevelMsgKey) { - m_keys.InsertAt(viewIndex, msgKey); + m_keys.InsertElementAt(viewIndex, msgKey); m_flags.InsertElementAt(viewIndex, msgFlags); levelToAdd = FindLevelInThread(msgHdr, startOfThreadViewIndex, viewIndex); m_levels.InsertElementAt(viewIndex, levelToAdd); @@ -5052,7 +5038,7 @@ NS_IMETHODIMP nsMsgDBView::OnAnnouncerGoingAway(nsIDBChangeAnnouncer *instigator // this is important, because the tree will ask us for our // row count, which get determine from the number of keys. - m_keys.RemoveAll(); + m_keys.Clear(); // be consistent m_flags.Clear(); m_levels.Clear(); @@ -5198,7 +5184,7 @@ NS_IMETHODIMP nsMsgDBView::SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) return NS_OK; } -nsresult nsMsgDBView::MarkThreadOfMsgRead(nsMsgKey msgId, nsMsgViewIndex msgIndex, nsMsgKeyArray &idsMarkedRead, PRBool bRead) +nsresult nsMsgDBView::MarkThreadOfMsgRead(nsMsgKey msgId, nsMsgViewIndex msgIndex, nsTArray &idsMarkedRead, PRBool bRead) { nsCOMPtr threadHdr; nsresult rv = GetThreadContainingIndex(msgIndex, getter_AddRefs(threadHdr)); @@ -5221,7 +5207,7 @@ nsresult nsMsgDBView::MarkThreadOfMsgRead(nsMsgKey msgId, nsMsgViewIndex msgInde return MarkThreadRead(threadHdr, threadIndex, idsMarkedRead, bRead); } -nsresult nsMsgDBView::MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex threadIndex, nsMsgKeyArray &idsMarkedRead, PRBool bRead) +nsresult nsMsgDBView::MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex threadIndex, nsTArray &idsMarkedRead, PRBool bRead) { PRBool threadElided = PR_TRUE; if (threadIndex != nsMsgViewIndex_None) @@ -5229,7 +5215,7 @@ nsresult nsMsgDBView::MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex thr PRUint32 numChildren; threadHdr->GetNumChildren(&numChildren); - idsMarkedRead.AllocateSpace(numChildren); + idsMarkedRead.SetCapacity(numChildren); for (PRInt32 childIndex = 0; childIndex < (PRInt32) numChildren ; childIndex++) { nsCOMPtr msgHdr; @@ -5249,7 +5235,7 @@ nsresult nsMsgDBView::MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex thr // MarkHdrRead will change the unread count on the thread m_db->MarkHdrRead(msgHdr, bRead, nsnull); // insert at the front. should we insert at the end? - idsMarkedRead.InsertAt(0, hdrMsgId); + idsMarkedRead.InsertElementAt(0, hdrMsgId); } } @@ -5724,7 +5710,7 @@ nsresult nsMsgDBView::FindPrevFlagged(nsMsgViewIndex startIndex, nsMsgViewIndex PRBool nsMsgDBView::IsValidIndex(nsMsgViewIndex index) { - return ((index >=0) && (index < (nsMsgViewIndex) m_keys.GetSize())); + return ((index >=0) && (index < (nsMsgViewIndex) m_keys.Length())); } nsresult nsMsgDBView::OrExtraFlag(nsMsgViewIndex index, PRUint32 orflag) @@ -5852,7 +5838,7 @@ nsresult nsMsgDBView::SetThreadIgnored(nsIMsgThread *thread, nsMsgViewIndex thre NoteChange(threadIndex, 1, nsMsgViewNotificationCode::changed); if (ignored) { - nsMsgKeyArray idsMarkedRead; + nsTArray idsMarkedRead; MarkThreadRead(thread, threadIndex, idsMarkedRead, PR_TRUE); CollapseByIndex(threadIndex, nsnull); @@ -6256,13 +6242,13 @@ NS_IMETHODIMP nsMsgDBView::SelectMsgByKey(nsMsgKey aKey) // but pass in a different key array so that we'll // select (and load) the desired message - nsMsgKeyArray preservedSelection; + nsAutoTArray preservedSelection; nsresult rv = SaveAndClearSelection(nsnull, preservedSelection); NS_ENSURE_SUCCESS(rv,rv); // now, restore our desired selection - nsMsgKeyArray keyArray; - keyArray.Add(aKey); + nsAutoTArray keyArray; + keyArray.AppendElement(aKey); // if the key was not found // (this can happen with "remember last selected message") @@ -6312,7 +6298,7 @@ nsresult nsMsgDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMess aNewMsgDBView->mDeleteModel = mDeleteModel; aNewMsgDBView->m_flags = m_flags; aNewMsgDBView->m_levels = m_levels; - aNewMsgDBView->m_keys.CopyArray(m_keys); + aNewMsgDBView->m_keys = m_keys; return NS_OK; } diff --git a/mailnews/base/src/nsMsgDBView.h b/mailnews/base/src/nsMsgDBView.h index ba07b2b86f8..5734df9d12c 100644 --- a/mailnews/base/src/nsMsgDBView.h +++ b/mailnews/base/src/nsMsgDBView.h @@ -47,7 +47,8 @@ #include "nsIMsgDatabase.h" #include "nsIMsgHdr.h" #include "nsMsgLineBuffer.h" // for nsByteArray -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsIDBChangeListener.h" #include "nsITreeView.h" #include "nsITreeBoxObject.h" @@ -120,7 +121,7 @@ public: NS_DECL_NSITREEVIEW NS_DECL_NSIJUNKMAILCLASSIFICATIONLISTENER - nsMsgViewIndex GetInsertIndexHelper(nsIMsgDBHdr *msgHdr, nsMsgKeyArray &keys, + nsMsgViewIndex GetInsertIndexHelper(nsIMsgDBHdr *msgHdr, nsTArray &keys, nsMsgViewSortOrderValue sortOrder, nsMsgViewSortTypeValue sortType); PRInt32 SecondarySort(nsMsgKey key1, nsISupports *folder1, nsMsgKey key2, nsISupports *folder2, @@ -205,8 +206,8 @@ protected: // When you are done changing the view, // call RestoreSelection passing in the same array // and we'll restore the selection AND unfreeze selection in the UI. - nsresult SaveAndClearSelection(nsMsgKey *aCurrentMsgKey, nsMsgKeyArray &aMsgKeyArray); - nsresult RestoreSelection(nsMsgKey aCurrentmsgKey, nsMsgKeyArray &aMsgKeyArray); + nsresult SaveAndClearSelection(nsMsgKey *aCurrentMsgKey, nsTArray &aMsgKeyArray); + nsresult RestoreSelection(nsMsgKey aCurrentmsgKey, nsTArray &aMsgKeyArray); // this is not safe to use when you have a selection // RowCountChanged() will call AdjustSelection() @@ -251,7 +252,8 @@ protected: nsresult PersistFolderInfo(nsIDBFolderInfo **dbFolderInfo); void SetMRUTimeForFolder(nsIMsgFolder *folder); - nsMsgKey GetAt(nsMsgViewIndex index) ; + nsMsgKey GetAt(nsMsgViewIndex index) + {return m_keys.SafeElementAt(index, nsMsgKey_None);} nsMsgViewIndex FindViewIndex(nsMsgKey key) {return FindKey(key, PR_FALSE);} nsMsgViewIndex FindHdr(nsIMsgDBHdr *msgHdr); @@ -264,7 +266,7 @@ protected: nsresult ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex startOfThreadViewIndex, PRUint32 *pNumListed); nsMsgViewIndex FindParentInThread(nsMsgKey parentKey, nsMsgViewIndex startOfThreadViewIndex); nsresult ListIdsInThreadOrder(nsIMsgThread *threadHdr, nsMsgKey parentKey, PRInt32 level, nsMsgViewIndex *viewIndex, PRUint32 *pNumListed); - PRInt32 GetSize(void) {return(m_keys.GetSize());} + PRInt32 GetSize(void) {return(m_keys.Length());} // notification api's void EnableChangeUpdates(); @@ -289,7 +291,7 @@ protected: nsMsgJunkStatus aNewClassification); nsresult ToggleReadByIndex(nsMsgViewIndex index); nsresult SetReadByIndex(nsMsgViewIndex index, PRBool read); - nsresult SetThreadOfMsgReadByIndex(nsMsgViewIndex index, nsMsgKeyArray &keysMarkedRead, PRBool read); + nsresult SetThreadOfMsgReadByIndex(nsMsgViewIndex index, nsTArray &keysMarkedRead, PRBool read); nsresult SetFlaggedByIndex(nsMsgViewIndex index, PRBool mark); nsresult SetLabelByIndex(nsMsgViewIndex index, nsMsgLabelValue label); nsresult OrExtraFlag(nsMsgViewIndex index, PRUint32 orflag); @@ -328,8 +330,8 @@ protected: nsresult FindPrevUnread(nsMsgKey startKey, nsMsgKey *pResultKey, nsMsgKey *resultThreadId); nsresult FindFirstFlagged(nsMsgViewIndex *pResultIndex); nsresult FindPrevFlagged(nsMsgViewIndex startIndex, nsMsgViewIndex *pResultIndex); - nsresult MarkThreadOfMsgRead(nsMsgKey msgId, nsMsgViewIndex msgIndex, nsMsgKeyArray &idsMarkedRead, PRBool bRead); - nsresult MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex threadIndex, nsMsgKeyArray &idsMarkedRead, PRBool bRead); + nsresult MarkThreadOfMsgRead(nsMsgKey msgId, nsMsgViewIndex msgIndex, nsTArray &idsMarkedRead, PRBool bRead); + nsresult MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex threadIndex, nsTArray &idsMarkedRead, PRBool bRead); PRBool IsValidIndex(nsMsgViewIndex index); nsresult ToggleIgnored(nsMsgViewIndex * indices, PRInt32 numIndices, nsMsgViewIndex *resultIndex, PRBool *resultToggleState); PRBool OfflineMsgSelected(nsMsgViewIndex * indices, PRInt32 numIndices); @@ -348,7 +350,7 @@ protected: PRBool AdjustReadFlag(nsIMsgDBHdr *msgHdr, PRUint32 *msgFlags); void FreeAll(nsVoidArray *ptrs); void ClearHdrCache(); - nsMsgKeyArray m_keys; + nsTArray m_keys; nsTArray m_flags; nsTArray m_levels; nsMsgImapDeleteModel mDeleteModel; diff --git a/mailnews/base/src/nsMsgFolderCompactor.cpp b/mailnews/base/src/nsMsgFolderCompactor.cpp index 813ed8a806e..6f0f3b7aac1 100644 --- a/mailnews/base/src/nsMsgFolderCompactor.cpp +++ b/mailnews/base/src/nsMsgFolderCompactor.cpp @@ -59,7 +59,6 @@ #include "nsMsgLocalFolderHdrs.h" #include "nsIMsgDatabase.h" -static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID); ////////////////////////////////////////////////////////////////////////////// // nsFolderCompactState ////////////////////////////////////////////////////////////////////////////// @@ -289,10 +288,10 @@ nsFolderCompactState::Init(nsIMsgFolder *folder, const char *baseMsgUri, nsIMsgD m_file->SetNativeLeafName(NS_LITERAL_CSTRING("nstmp")); m_file->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 00600); //make sure we are not crunching existing nstmp file m_window = aMsgWindow; - m_keyArray.RemoveAll(); + m_keyArray.Clear(); InitDB(db); - m_size = m_keyArray.GetSize(); + m_size = m_keyArray.Length(); m_curIndex = 0; rv = NS_NewLocalFileOutputStream(getter_AddRefs(m_fileStream), m_file, -1, 00600); diff --git a/mailnews/base/src/nsMsgFolderCompactor.h b/mailnews/base/src/nsMsgFolderCompactor.h index fe1bc552735..e7b0a4d4d7c 100644 --- a/mailnews/base/src/nsMsgFolderCompactor.h +++ b/mailnews/base/src/nsMsgFolderCompactor.h @@ -86,7 +86,7 @@ protected: nsCOMPtr m_db; // new database for the compact folder nsCOMPtr m_file; // new mailbox for the compact folder nsCOMPtr m_fileStream; // output file stream for writing - nsMsgKeyArray m_keyArray; // all message keys need to be copied over + nsTArray m_keyArray; // all message keys need to be copied over PRInt32 m_size; // size of the message key array PRInt32 m_curIndex; // index of the current copied message key in key array nsMsgKey m_startOfNewMsg; // offset in mailbox of new message diff --git a/mailnews/base/src/nsMsgGroupThread.cpp b/mailnews/base/src/nsMsgGroupThread.cpp index fe3f991d963..c204ce3c907 100755 --- a/mailnews/base/src/nsMsgGroupThread.cpp +++ b/mailnews/base/src/nsMsgGroupThread.cpp @@ -109,13 +109,13 @@ NS_IMETHODIMP nsMsgGroupThread::GetSubject(nsACString& result) NS_IMETHODIMP nsMsgGroupThread::GetNumChildren(PRUint32 *aNumChildren) { NS_ENSURE_ARG_POINTER(aNumChildren); - *aNumChildren = m_keys.GetSize(); // - ((m_dummy) ? 1 : 0); + *aNumChildren = m_keys.Length(); // - ((m_dummy) ? 1 : 0); return NS_OK; } PRUint32 nsMsgGroupThread::NumRealChildren() { - return m_keys.GetSize() - ((m_dummy) ? 1 : 0); + return m_keys.Length() - ((m_dummy) ? 1 : 0); } NS_IMETHODIMP nsMsgGroupThread::GetNumUnreadChildren (PRUint32 *aNumUnreadChildren) @@ -153,7 +153,7 @@ nsresult nsMsgGroupThread::RerootThread(nsIMsgDBHdr *newParentOfOldRoot, nsIMsgD { // move the root hdr to pos 0 by removing it and adding it at 0. m_keys.RemoveElement(newRoot); - m_keys.InsertAt(0, newRoot); + m_keys.InsertElementAt(0, newRoot); ancestorHdr->SetThreadParent(nsMsgKey_None); } return rv; @@ -175,7 +175,7 @@ nsresult nsMsgGroupThread::AddMsgHdrInDateOrder(nsIMsgDBHdr *child, nsMsgDBView PRUint32 insertIndex = 0; // since we're sorted by date, we could do a binary search for the // insert point. Or, we could start at the end... - if (m_keys.GetSize() > 0) + if (m_keys.Length() > 0) { nsMsgViewSortTypeValue sortType; nsMsgViewSortOrderValue sortOrder; @@ -188,7 +188,7 @@ nsresult nsMsgGroupThread::AddMsgHdrInDateOrder(nsIMsgDBHdr *child, nsMsgDBView // sort by date within group insertIndex = view->GetInsertIndexHelper(child, m_keys, threadSortOrder, nsMsgViewSortType::byDate); } - m_keys.InsertAt(insertIndex, newHdrKey); + m_keys.InsertElementAt(insertIndex, newHdrKey); if (!insertIndex) m_threadRootKey = newHdrKey; return ret; @@ -260,7 +260,7 @@ nsresult nsMsgGroupThread::ReparentNonReferenceChildrenOf(nsIMsgDBHdr *topLevelH NS_IMETHODIMP nsMsgGroupThread::GetChildKeyAt(PRInt32 aIndex, nsMsgKey *aResult) { NS_ENSURE_ARG_POINTER(aResult); - if (aIndex >= m_keys.GetSize()) + if (aIndex >= m_keys.Length()) return NS_ERROR_INVALID_ARG; *aResult = m_keys[aIndex]; return NS_OK; @@ -268,7 +268,7 @@ NS_IMETHODIMP nsMsgGroupThread::GetChildKeyAt(PRInt32 aIndex, nsMsgKey *aResult) NS_IMETHODIMP nsMsgGroupThread::GetChildAt(PRInt32 aIndex, nsIMsgDBHdr **aResult) { - if (aIndex >= m_keys.GetSize()) + if (aIndex >= m_keys.Length()) return NS_MSG_MESSAGE_NOT_FOUND; return m_db->GetMsgHdrForKey(m_keys[aIndex], aResult); } @@ -289,16 +289,14 @@ NS_IMETHODIMP nsMsgGroupThread::GetChildHdrAt(PRInt32 aIndex, nsIMsgDBHdr **aRes NS_IMETHODIMP nsMsgGroupThread::RemoveChildAt(PRInt32 aIndex) { - m_keys.RemoveAt(aIndex); + m_keys.RemoveElementAt(aIndex); return NS_OK; } nsresult nsMsgGroupThread::RemoveChild(nsMsgKey msgKey) { - PRUint32 childIndex = m_keys.IndexOf(msgKey); - if (childIndex != kNotFound) - m_keys.RemoveAt(childIndex); + m_keys.RemoveElement(msgKey); return NS_OK; } @@ -329,7 +327,7 @@ NS_IMETHODIMP nsMsgGroupThread::RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAn nsresult rv = RemoveChild(key); // if we're deleting the root of a dummy thread, need to update the threadKey // and the dummy header at position 0 - if (m_dummy && keyWasFirstKey && m_keys.GetSize() > 1) + if (m_dummy && keyWasFirstKey && m_keys.Length() > 1) m_keys[0] = m_keys[1]; return rv; diff --git a/mailnews/base/src/nsMsgGroupThread.h b/mailnews/base/src/nsMsgGroupThread.h index ff116e188f3..5617fd24422 100755 --- a/mailnews/base/src/nsMsgGroupThread.h +++ b/mailnews/base/src/nsMsgGroupThread.h @@ -39,7 +39,8 @@ #include "msgCore.h" #include "nsCOMArray.h" #include "nsIMsgThread.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsIMsgDatabase.h" #include "nsIMsgHdr.h" #include "nsMsgDBView.h" @@ -78,7 +79,7 @@ protected: PRUint32 m_flags; nsMsgKey m_threadRootKey; PRUint32 m_newestMsgDate; - nsMsgKeyArray m_keys; + nsTArray m_keys; PRBool m_dummy; // top level msg is a dummy, e.g., grouped by age. nsCOMPtr m_db; // should we make a weak ref or just a ptr? }; diff --git a/mailnews/base/src/nsMsgGroupView.cpp b/mailnews/base/src/nsMsgGroupView.cpp index 1dc2f426e54..b7c9d51528f 100755 --- a/mailnews/base/src/nsMsgGroupView.cpp +++ b/mailnews/base/src/nsMsgGroupView.cpp @@ -324,14 +324,14 @@ nsMsgGroupThread *nsMsgGroupView::AddHdrToThread(nsIMsgDBHdr *msgHdr, PRBool *pN nsMsgViewIndex insertIndex = GetInsertIndex(msgHdr); if (insertIndex == nsMsgViewIndex_None) - insertIndex = m_keys.GetSize(); - m_keys.InsertAt(insertIndex, msgKey); + insertIndex = m_keys.Length(); + m_keys.InsertElementAt(insertIndex, msgKey); m_flags.InsertElementAt(insertIndex, msgFlags | MSG_VIEW_FLAG_ISTHREAD | MSG_FLAG_ELIDED); m_levels.InsertElementAt(insertIndex, 0); // if grouped by date, insert dummy header for "age" if (GroupViewUsesDummyRow()) { - foundThread->m_keys.InsertAt(0, msgKey /* nsMsgKey_None */); + foundThread->m_keys.InsertElementAt(0, msgKey /* nsMsgKey_None */); // the previous code made it look like hashKey in this case was always an integer foundThread->m_threadKey = atoi(NS_LossyConvertUTF16toASCII(hashKey).get()); } @@ -391,7 +391,7 @@ NS_IMETHODIMP nsMsgGroupView::OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgV } // go through the view updating the flags for threads with more than one message... // and if grouped by date, expanding threads that were expanded before. - for (PRUint32 viewIndex = 0; viewIndex < m_keys.GetSize(); viewIndex++) + for (PRUint32 viewIndex = 0; viewIndex < m_keys.Length(); viewIndex++) { nsCOMPtr thread; GetThreadContainingIndex(viewIndex, getter_AddRefs(thread)); @@ -413,7 +413,7 @@ NS_IMETHODIMP nsMsgGroupView::OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgV } } } - *aCount = m_keys.GetSize(); + *aCount = m_keys.Length(); return rv; } @@ -425,14 +425,14 @@ nsresult nsMsgGroupView::HandleDayChange() { PRInt32 count; m_dayChanged = PR_FALSE; - nsMsgKeyArray preservedSelection; + nsAutoTArray preservedSelection; nsMsgKey curSelectedKey; SaveAndClearSelection(&curSelectedKey, preservedSelection); InternalClose(); PRInt32 oldSize = GetSize(); // this is important, because the tree will ask us for our // row count, which get determine from the number of keys. - m_keys.RemoveAll(); + m_keys.Clear(); // be consistent m_flags.Clear(); m_levels.Clear(); @@ -449,8 +449,8 @@ nsresult nsMsgGroupView::HandleDayChange() NS_ENSURE_SUCCESS(rv,rv); // now, restore our desired selection - nsMsgKeyArray keyArray; - keyArray.Add(curSelectedKey); + nsAutoTArray keyArray; + keyArray.AppendElement(curSelectedKey); return RestoreSelection(curSelectedKey, keyArray); } @@ -513,7 +513,7 @@ nsresult nsMsgGroupView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentKey, P msgKey = thread->m_keys[msgIndexInThread]; } - m_keys.InsertAt(threadIndex + msgIndexInThread, msgKey); + m_keys.InsertElementAt(threadIndex + msgIndexInThread, msgKey); m_flags.InsertElementAt(threadIndex + msgIndexInThread, msgFlags); if (msgIndexInThread > 0) { @@ -596,7 +596,7 @@ NS_IMETHODIMP nsMsgGroupView::OnHdrDeleted(nsIMsgDBHdr *aHdrDeleted, nsMsgKey aP OrExtraFlag(viewIndexOfThread - 1, MSG_VIEW_FLAG_DUMMY | MSG_VIEW_FLAG_ISTHREAD); } } - if (!groupThread->m_keys.GetSize()) + if (!groupThread->m_keys.Length()) { nsString hashKey; rv = HashHdr(aHdrDeleted, hashKey); diff --git a/mailnews/base/src/nsMsgQuickSearchDBView.cpp b/mailnews/base/src/nsMsgQuickSearchDBView.cpp index bb07cc59209..c397f95587d 100644 --- a/mailnews/base/src/nsMsgQuickSearchDBView.cpp +++ b/mailnews/base/src/nsMsgQuickSearchDBView.cpp @@ -103,8 +103,8 @@ NS_IMETHODIMP nsMsgQuickSearchDBView::DoCommand(nsMsgViewCommandTypeValue aComma nsCOMPtr imapFolder = do_QueryInterface(m_folder); if (NS_SUCCEEDED(rv) && imapFolder) - rv = imapFolder->StoreImapFlags(kImapMsgSeenFlag, PR_TRUE, m_keys.GetArray(), - m_keys.GetSize(), nsnull); + rv = imapFolder->StoreImapFlags(kImapMsgSeenFlag, PR_TRUE, m_keys.Elements(), + m_keys.Length(), nsnull); m_db->SetSummaryValid(PR_TRUE); return rv; @@ -136,7 +136,7 @@ nsresult nsMsgQuickSearchDBView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aPare (void) newHdr->GetMessageKey(&newKey); nsMsgViewIndex insertIndex = GetInsertIndexHelper(newHdr, m_origKeys, nsMsgViewSortOrder::ascending, nsMsgViewSortType::byId); - m_origKeys.InsertAt(insertIndex, newKey); + m_origKeys.InsertElementAt(insertIndex, newKey); nsMsgThreadedDBView::OnNewHeader(newHdr, aParentKey, ensureListed); // do not add a new message if there isn't a match. } } @@ -261,7 +261,7 @@ nsMsgQuickSearchDBView::OnSearchDone(nsresult status) { if (m_viewFolder) { - nsMsgKeyArray keyArray; + nsTArray keyArray; nsCString searchUri; m_viewFolder->GetURI(searchUri); PRUint32 count = m_hdrHits.Count(); @@ -271,13 +271,13 @@ nsMsgQuickSearchDBView::OnSearchDone(nsresult status) { nsMsgKey key; m_hdrHits[i]->GetMessageKey(&key); - keyArray.Add(key); + keyArray.AppendElement(key); } nsMsgKey *staleHits; PRUint32 numBadHits; if (m_db) { - m_db->RefreshCache(searchUri.get(), m_hdrHits.Count(), keyArray.GetArray(), &numBadHits, &staleHits); + m_db->RefreshCache(searchUri.get(), m_hdrHits.Count(), keyArray.Elements(), &numBadHits, &staleHits); for (i = 0; i < numBadHits; i++) { nsMsgViewIndex staleHitIndex = FindKey(staleHits[i], PR_TRUE); @@ -305,7 +305,7 @@ nsMsgQuickSearchDBView::OnNewSearch() { PRInt32 oldSize = GetSize(); - m_keys.RemoveAll(); + m_keys.Clear(); m_levels.Clear(); m_flags.Clear(); m_hdrHits.Clear(); @@ -371,7 +371,7 @@ nsresult nsMsgQuickSearchDBView::GetFirstMessageHdrToDisplayInThread(nsIMsgThrea child->GetMessageKey(&msgKey); // this works because we've already sorted m_keys by id. - nsMsgViewIndex keyIndex = m_origKeys.IndexOfSorted(msgKey); + nsMsgViewIndex keyIndex = m_origKeys.BinaryIndexOf(msgKey); if (keyIndex != kNotFound) { // this is the root, so it's the best we're going to do. @@ -420,13 +420,13 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns // iterate over the messages in the view, getting the thread id's // sort m_keys so we can quickly find if a key is in the view. - m_keys.QuickSort(); + m_keys.Sort(); // array of the threads' root hdr keys. - nsMsgKeyArray threadRootIds; + nsTArray threadRootIds; nsCOMPtr rootHdr; nsCOMPtr msgHdr; nsCOMPtr threadHdr; - for (PRUint32 i = 0; i < m_keys.GetSize(); i++) + for (PRUint32 i = 0; i < m_keys.Length(); i++) { GetMsgHdrForViewIndex(i, getter_AddRefs(msgHdr)); m_db->GetThreadContainingMsgHdr(msgHdr, getter_AddRefs(threadHdr)); @@ -434,30 +434,30 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns { nsMsgKey rootKey; threadHdr->GetChildKeyAt(0, &rootKey); - nsMsgViewIndex threadRootIndex = threadRootIds.IndexOfSorted(rootKey); + nsMsgViewIndex threadRootIndex = threadRootIds.BinaryIndexOf(rootKey); // if we already have that id in top level threads, ignore this msg. if (threadRootIndex != kNotFound) continue; // it would be nice if GetInsertIndexHelper always found the hdr, but it doesn't. threadHdr->GetChildHdrAt(0, getter_AddRefs(rootHdr)); threadRootIndex = GetInsertIndexHelper(rootHdr, threadRootIds, nsMsgViewSortOrder::ascending, nsMsgViewSortType::byId); - threadRootIds.InsertAt(threadRootIndex, rootKey); + threadRootIds.InsertElementAt(threadRootIndex, rootKey); } } - m_origKeys.CopyArray(m_keys); + m_origKeys.SwapElements(m_keys); // need to sort the top level threads now by sort order, if it's not by id. if (sortType != nsMsgViewSortType::byId) { - m_keys.CopyArray(threadRootIds); + m_keys.SwapElements(threadRootIds); nsMsgDBView::Sort(sortType, sortOrder); - threadRootIds.CopyArray(m_keys); + threadRootIds.SwapElements(m_keys); } - m_keys.RemoveAll(); + m_keys.Clear(); m_levels.Clear(); m_flags.Clear(); // now we've build up the list of thread ids - need to build the view // from that. So for each thread id, we need to list the messages in the thread. - PRUint32 numThreads = threadRootIds.GetSize(); + PRUint32 numThreads = threadRootIds.Length(); for (PRUint32 threadIndex = 0; threadIndex < numThreads; threadIndex++) { m_db->GetMsgHdrForKey(threadRootIds[threadIndex], getter_AddRefs(rootHdr)); @@ -475,17 +475,17 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns displayRootHdr->GetMessageKey(&rootKey); displayRootHdr->GetFlags(&rootFlags); rootFlags |= MSG_VIEW_FLAG_ISTHREAD; - m_keys.Add(rootKey); + m_keys.AppendElement(rootKey); m_flags.AppendElement(rootFlags); m_levels.AppendElement(0); - nsMsgViewIndex startOfThreadViewIndex = m_keys.GetSize() - 1; + nsMsgViewIndex startOfThreadViewIndex = m_keys.Length() - 1; PRUint32 numListed; ListIdsInThread(threadHdr, startOfThreadViewIndex, &numListed); } } } - NS_ASSERTION(m_origKeys.GetSize() == m_keys.GetSize(), "problem threading quick search"); + NS_ASSERTION(m_origKeys.Length() == m_keys.Length(), "problem threading quick search"); return NS_OK; } @@ -511,14 +511,14 @@ nsresult nsMsgQuickSearchDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsg msgHdr->GetMessageKey(&msgKey); if (msgKey != rootKey) { - nsMsgViewIndex threadRootIndex = m_origKeys.IndexOfSorted(msgKey); + nsMsgViewIndex threadRootIndex = m_origKeys.BinaryIndexOf(msgKey); // if this hdr is in the original view, add it to new view. if (threadRootIndex != kNotFound) { PRUint32 childFlags; msgHdr->GetFlags(&childFlags); PRUint8 levelToAdd; - m_keys.InsertAt(viewIndex, msgKey); + m_keys.InsertElementAt(viewIndex, msgKey); m_flags.InsertElementAt(viewIndex, childFlags); if (! (rootFlags & MSG_VIEW_FLAG_HASCHILDREN)) { @@ -539,7 +539,7 @@ nsresult nsMsgQuickSearchDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsg nsresult nsMsgQuickSearchDBView::ExpansionDelta(nsMsgViewIndex index, PRInt32 *expansionDelta) { *expansionDelta = 0; - if ( index > ((nsMsgViewIndex) m_keys.GetSize())) + if (index >= ((nsMsgViewIndex) m_keys.Length())) return NS_MSG_MESSAGE_NOT_FOUND; char flags = m_flags[index]; diff --git a/mailnews/base/src/nsMsgQuickSearchDBView.h b/mailnews/base/src/nsMsgQuickSearchDBView.h index afb50c74684..2d106bc8b3e 100644 --- a/mailnews/base/src/nsMsgQuickSearchDBView.h +++ b/mailnews/base/src/nsMsgQuickSearchDBView.h @@ -68,7 +68,7 @@ public: protected: nsWeakPtr m_searchSession; - nsMsgKeyArray m_origKeys; + nsTArray m_origKeys; PRBool m_usingCachedHits; PRBool m_cacheEmpty; nsCOMArray m_hdrHits; diff --git a/mailnews/base/src/nsMsgSearchDBView.cpp b/mailnews/base/src/nsMsgSearchDBView.cpp index 67100ecbed9..f6822527c70 100644 --- a/mailnews/base/src/nsMsgSearchDBView.cpp +++ b/mailnews/base/src/nsMsgSearchDBView.cpp @@ -190,7 +190,7 @@ nsresult nsMsgSearchDBView::AddHdrFromFolder(nsIMsgDBHdr *msgHdr, nsISupports *f if (msgKey != nsMsgKey_None) { msgHdr->GetFlags(&msgFlags); - m_keys.Add(msgKey); + m_keys.AppendElement(msgKey); m_levels.AppendElement(0); m_flags.AppendElement(msgFlags); @@ -250,7 +250,7 @@ nsMsgSearchDBView::OnNewSearch() m_dbToUseList.Clear(); m_folders->Clear(); - m_keys.RemoveAll(); + m_keys.Clear(); m_levels.Clear(); m_flags.Clear(); @@ -600,7 +600,7 @@ NS_IMETHODIMP nsMsgSearchDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgView return NS_OK; nsMsgKey preservedKey; - nsMsgKeyArray preservedSelection; + nsAutoTArray preservedSelection; SaveAndClearSelection(&preservedKey, preservedSelection); rv = nsMsgDBView::Sort(sortType,sortOrder); diff --git a/mailnews/base/src/nsMsgThreadedDBView.cpp b/mailnews/base/src/nsMsgThreadedDBView.cpp index 7128fc16e4f..036b248af20 100644 --- a/mailnews/base/src/nsMsgThreadedDBView.cpp +++ b/mailnews/base/src/nsMsgThreadedDBView.cpp @@ -125,10 +125,10 @@ nsresult nsMsgThreadedDBView::InitThreadedView(PRInt32 *pCount) { nsresult rv; - m_keys.RemoveAll(); + m_keys.Clear(); m_flags.Clear(); m_levels.Clear(); - m_prevKeys.RemoveAll(); + m_prevKeys.Clear(); m_prevFlags.Clear(); m_prevLevels.Clear(); m_havePrevView = PR_FALSE; @@ -173,7 +173,7 @@ nsresult nsMsgThreadedDBView::SortThreads(nsMsgViewSortTypeValue sortType, nsMsg // messages in the view, and then call nsMsgDBView::Sort(sortType, sortOrder). // Then, we expand the threads in the result array that were expanded in the original view (perhaps by copying // from the original view, but more likely just be calling expand). - for (PRUint32 i = 0; i < m_keys.GetSize(); i++) + for (PRUint32 i = 0; i < m_keys.Length(); i++) { if (m_flags[i] & MSG_VIEW_FLAG_ISTHREAD) { @@ -186,7 +186,7 @@ nsresult nsMsgThreadedDBView::SortThreads(nsMsgViewSortTypeValue sortType, nsMsg numThreads++; } } - m_keys.SetSize(numThreads); + m_keys.SetLength(numThreads); m_flags.SetLength(numThreads); m_levels.SetLength(numThreads); //m_viewFlags &= ~nsMsgViewFlagsType::kThreadedDisplay; @@ -198,7 +198,7 @@ nsresult nsMsgThreadedDBView::SortThreads(nsMsgViewSortTypeValue sortType, nsMsg // and expand the thread. We have to update MSG_VIEW_FLAG_HAS_CHILDREN because // we may be going from a flat sort, which doesn't maintain that flag, // to a threaded sort, which requires that flag. - for (PRUint32 j = 0; j < m_keys.GetSize(); j++) + for (PRUint32 j = 0; j < m_keys.Length(); j++) { PRUint32 flags = m_flags[j]; if ((flags & (MSG_VIEW_FLAG_HASCHILDREN | MSG_FLAG_ELIDED)) == MSG_VIEW_FLAG_HASCHILDREN) @@ -238,7 +238,7 @@ nsresult nsMsgThreadedDBView::AddKeys(nsMsgKey *pKeys, PRInt32 *pFlags, const ch { PRInt32 numAdded = 0; // Allocate enough space first to avoid memory allocation/deallocation. - m_keys.AllocateSpace(numKeysToAdd+m_keys.GetSize()); + m_keys.SetCapacity(m_keys.Length() + numKeysToAdd); m_flags.SetCapacity(m_flags.Length() + numKeysToAdd); m_levels.SetCapacity(m_levels.Length() + numKeysToAdd); for (PRInt32 i = 0; i < numKeysToAdd; i++) @@ -255,14 +255,14 @@ nsresult nsMsgThreadedDBView::AddKeys(nsMsgKey *pKeys, PRInt32 *pFlags, const ch flag |= MSG_FLAG_ELIDED; // should this be persistent? Doesn't seem to need to be. flag |= MSG_VIEW_FLAG_ISTHREAD; - m_keys.Add(pKeys[i]); + m_keys.AppendElement(pKeys[i]); m_flags.AppendElement(flag); m_levels.AppendElement(pLevels[i]); numAdded++; // we expand as we build the view, which allows us to insert at the end of the key array, // instead of the middle, and is much faster. if ((!(m_viewFlags & nsMsgViewFlagsType::kThreadedDisplay) || m_viewFlags & nsMsgViewFlagsType::kExpandAll) && flag & MSG_FLAG_ELIDED) - ExpandByIndex(m_keys.GetSize() - 1, NULL); + ExpandByIndex(m_keys.Length() - 1, NULL); } return numAdded; } @@ -291,7 +291,7 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi sortType = nsMsgViewSortType::byId; nsMsgKey preservedKey; - nsMsgKeyArray preservedSelection; + nsAutoTArray preservedSelection; SaveAndClearSelection(&preservedKey, preservedSelection); // if the client wants us to forget our cached id arrays, they // should build a new view. If this isn't good enough, we @@ -307,8 +307,7 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi if ( m_havePrevView) { // restore saved id array and flags array - m_keys.RemoveAll(); - m_keys.InsertAt(0, &m_prevKeys); + m_keys = m_prevKeys; m_flags = m_prevFlags; m_levels = m_prevLevels; m_sortValid = PR_TRUE; @@ -351,8 +350,7 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi else { // going from SortByThread to non-thread sort - must build new key, level,and flags arrays - m_prevKeys.RemoveAll(); - m_prevKeys.InsertAt(0, &m_keys); + m_prevKeys = m_keys; m_prevFlags = m_flags; m_prevLevels = m_levels; // do this before we sort, so that we'll use the cheap method @@ -502,7 +500,7 @@ void nsMsgThreadedDBView::OnExtraFlagChanged(nsMsgViewIndex index, PRUint32 extr if (m_havePrevView) { nsMsgKey keyChanged = m_keys[index]; - nsMsgViewIndex prevViewIndex = m_prevKeys.FindIndex(keyChanged); + nsMsgViewIndex prevViewIndex = m_prevKeys.IndexOf(keyChanged); if (prevViewIndex != nsMsgViewIndex_None) { PRUint32 prevFlag = m_prevFlags[prevViewIndex]; @@ -537,7 +535,7 @@ void nsMsgThreadedDBView::OnHeaderAddedOrDeleted() void nsMsgThreadedDBView::ClearPrevIdArray() { - m_prevKeys.RemoveAll(); + m_prevKeys.Clear(); m_prevLevels.Clear(); m_prevFlags.Clear(); m_havePrevView = PR_FALSE; @@ -624,7 +622,7 @@ nsresult nsMsgThreadedDBView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentK level = m_levels[parentIndex] + 1; insertIndex = GetInsertInfoForNewHdr(newHdr, parentIndex, level); } - m_keys.InsertAt(insertIndex, newKey); + m_keys.InsertElementAt(insertIndex, newKey); m_flags.InsertElementAt(insertIndex, newFlags); m_levels.InsertElementAt(insertIndex, level); diff --git a/mailnews/base/src/nsMsgThreadedDBView.h b/mailnews/base/src/nsMsgThreadedDBView.h index 577b6dfbf56..d77587089d1 100644 --- a/mailnews/base/src/nsMsgThreadedDBView.h +++ b/mailnews/base/src/nsMsgThreadedDBView.h @@ -77,7 +77,7 @@ protected: // these are used to save off the previous view so that bopping back and forth // between two views is quick (e.g., threaded and flat sorted by date). PRBool m_havePrevView; - nsMsgKeyArray m_prevKeys; //this is used for caching non-threaded view. + nsTArray m_prevKeys; //this is used for caching non-threaded view. nsTArray m_prevFlags; nsTArray m_prevLevels; nsCOMPtr m_threadEnumerator; diff --git a/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp b/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp index c5d3e2a0466..64560061bd0 100755 --- a/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp +++ b/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp @@ -160,7 +160,7 @@ nsresult nsMsgXFVirtualFolderDBView::InsertHdrFromFolder(nsIMsgDBHdr *msgHdr, ns PRUint32 msgFlags; msgHdr->GetMessageKey(&msgKey); msgHdr->GetFlags(&msgFlags); - m_keys.InsertAt(insertIndex, msgKey); + m_keys.InsertElementAt(insertIndex, msgKey); m_flags.InsertElementAt(insertIndex, msgFlags); m_folders->InsertElementAt(folder, insertIndex); m_levels.InsertElementAt(insertIndex, 0); @@ -203,15 +203,14 @@ void nsMsgXFVirtualFolderDBView::UpdateCacheAndViewForPrevSearchedFolders(nsIMsg if (m_curFolderGettingHits) { PRUint32 count = m_hdrHits.Count(); - nsMsgKeyArray newHits; + nsTArray newHits; + newHits.SetLength(count); for (PRUint32 i = 0; i < count; i++) { - nsMsgKey key; - m_hdrHits[i]->GetMessageKey(&key); - newHits.Add(key); + m_hdrHits[i]->GetMessageKey(&newHits[i]); } - newHits.QuickSort(); - UpdateCacheAndViewForFolder(m_curFolderGettingHits, newHits.GetArray(), newHits.GetSize()); + newHits.Sort(); + UpdateCacheAndViewForFolder(m_curFolderGettingHits, newHits.Elements(), newHits.Length()); } while (m_foldersSearchingOver.Count() > 0) @@ -252,7 +251,7 @@ nsMsgXFVirtualFolderDBView::OnSearchHit(nsIMsgDBHdr* aMsgHdr, nsIMsgFolder *fold UpdateCacheAndViewForPrevSearchedFolders(folder); m_curFolderGettingHits = folder; m_hdrHits.Clear(); - m_curFolderStartKeyIndex = m_keys.GetSize(); + m_curFolderStartKeyIndex = m_keys.Length(); } PRBool hdrInCache = PR_FALSE; nsCString searchUri; @@ -321,7 +320,7 @@ nsMsgXFVirtualFolderDBView::OnNewSearch() m_doingSearch = PR_TRUE; m_folders->Clear(); - m_keys.RemoveAll(); + m_keys.Clear(); m_levels.Clear(); m_flags.Clear(); diff --git a/mailnews/base/util/Makefile.in b/mailnews/base/util/Makefile.in index de6470c3142..f3a977a00a1 100644 --- a/mailnews/base/util/Makefile.in +++ b/mailnews/base/util/Makefile.in @@ -92,9 +92,7 @@ REQUIRES = xpcom \ CPPSRCS = \ nsMsgLineBuffer.cpp \ nsMsgDBFolder.cpp \ - nsUInt32Array.cpp \ nsMsgKeySet.cpp \ - nsMsgKeyArray.cpp \ nsMsgIdentity.cpp \ nsMsgIncomingServer.cpp \ nsMsgUtils.cpp \ @@ -109,9 +107,7 @@ CPPSRCS = \ EXPORTS = \ nsMsgLineBuffer.h \ - nsUInt32Array.h \ nsMsgKeySet.h \ - nsMsgKeyArray.h \ nsMsgDBFolder.h \ nsMsgIdentity.h \ nsMsgIncomingServer.h \ diff --git a/mailnews/base/util/nsImapMoveCoalescer.cpp b/mailnews/base/util/nsImapMoveCoalescer.cpp index e967476c07b..5a050e0a932 100755 --- a/mailnews/base/util/nsImapMoveCoalescer.cpp +++ b/mailnews/base/util/nsImapMoveCoalescer.cpp @@ -71,7 +71,7 @@ nsresult nsImapMoveCoalescer::AddMove(nsIMsgFolder *folder, nsMsgKey key) if (supports) { PRInt32 folderIndex = m_destFolders->IndexOf(supports); - nsMsgKeyArray *keysToAdd = nsnull; + nsTArray *keysToAdd = nsnull; if (folderIndex >= 0) { keysToAdd = &(m_sourceKeyArrays[folderIndex]); @@ -83,8 +83,8 @@ nsresult nsImapMoveCoalescer::AddMove(nsIMsgFolder *folder, nsMsgKey key) if (!keysToAdd) return NS_ERROR_OUT_OF_MEMORY; } - if (keysToAdd->IndexOf(key) == -1) - keysToAdd->Add(key); + if (keysToAdd->IndexOf(key) == kNotFound) + keysToAdd->AppendElement(key); return NS_OK; } else @@ -116,15 +116,15 @@ nsresult nsImapMoveCoalescer::PlaybackMoves(PRBool doNewMailNotification /* = PR do_GetService(NS_IMAPSERVICE_CONTRACTID, &rv); if (NS_SUCCEEDED(rv)) { - nsMsgKeyArray &keysToAdd = m_sourceKeyArrays[i]; + nsTArray& keysToAdd = m_sourceKeyArrays[i]; PRInt32 numNewMessages = 0; - PRInt32 numKeysToAdd = keysToAdd.GetSize(); + PRInt32 numKeysToAdd = keysToAdd.Length(); if (numKeysToAdd == 0) continue; nsCOMPtr messages; NS_NewISupportsArray(getter_AddRefs(messages)); - for (PRUint32 keyIndex = 0; keyIndex < keysToAdd.GetSize(); keyIndex++) + for (PRUint32 keyIndex = 0; keyIndex < keysToAdd.Length(); keyIndex++) { nsCOMPtr mailHdr = nsnull; rv = m_sourceFolder->GetMessageHeader(keysToAdd.ElementAt(keyIndex), getter_AddRefs(mailHdr)); @@ -155,11 +155,11 @@ nsresult nsImapMoveCoalescer::PlaybackMoves(PRBool doNewMailNotification /* = PR oldNewMessageCount = 0; m_sourceFolder->SetNumNewMessages(oldNewMessageCount); - + nsCOMPtr sourceSupports = do_QueryInterface(m_sourceFolder, &rv); nsCOMPtr urlListener(do_QueryInterface(sourceSupports)); - - keysToAdd.RemoveAll(); + + keysToAdd.Clear(); nsCOMPtr copySvc = do_GetService(NS_MSGCOPYSERVICE_CONTRACTID); if (copySvc) { @@ -171,7 +171,7 @@ nsresult nsImapMoveCoalescer::PlaybackMoves(PRBool doNewMailNotification /* = PR listener = do_QueryInterface(copyListener); } rv = copySvc->CopyMessages(m_sourceFolder, messages, destFolder, PR_TRUE, - listener, m_msgWindow, PR_FALSE /*allowUndo*/); + listener, m_msgWindow, PR_FALSE /*allowUndo*/); if (NS_SUCCEEDED(rv)) m_outstandingMoves++; } @@ -200,7 +200,7 @@ nsImapMoveCoalescer::OnStopRunningUrl(nsIURI *aUrl, nsresult aExitCode) return NS_OK; } -nsMsgKeyArray *nsImapMoveCoalescer::GetKeyBucket(PRUint32 keyArrayIndex) +nsTArray *nsImapMoveCoalescer::GetKeyBucket(PRUint32 keyArrayIndex) { if (keyArrayIndex >= m_keyBuckets.Length() && !m_keyBuckets.SetLength(keyArrayIndex + 1)) diff --git a/mailnews/base/util/nsImapMoveCoalescer.h b/mailnews/base/util/nsImapMoveCoalescer.h index 65a0bf1d5a4..7968653c1e7 100755 --- a/mailnews/base/util/nsImapMoveCoalescer.h +++ b/mailnews/base/util/nsImapMoveCoalescer.h @@ -42,11 +42,11 @@ #include "nsISupportsArray.h" #include "nsIMsgWindow.h" #include "nsCOMPtr.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" #include "nsTArray.h" // imap move coalescer class - in order to keep nsImapMailFolder from growing like Topsy -// Logically, we want to keep track of an nsMsgKeyArray per nsIMsgFolder, and then +// Logically, we want to keep track of an nsTArray per nsIMsgFolder, and then // be able to retrieve them one by one and play back the moves. // This utility class will be used by both the filter code and the offline playback code, // to avoid multiple moves to the same folder. @@ -66,18 +66,18 @@ public: nsresult PlaybackMoves(PRBool doNewMailNotification = PR_FALSE); // this lets the caller store keys in an arbitrary number of buckets. If the bucket // for the passed in index doesn't exist, it will get created. - nsMsgKeyArray *GetKeyBucket(PRUint32 keyArrayIndex); + nsTArray *GetKeyBucket(PRUint32 keyArrayIndex); nsIMsgWindow *GetMsgWindow() {return m_msgWindow;} PRBool HasPendingMoves() {return m_hasPendingMoves;} protected: // m_sourceKeyArrays and m_destFolders are parallel arrays. - nsTArray m_sourceKeyArrays; + nsTArray > m_sourceKeyArrays; nsCOMPtr m_destFolders; nsCOMPtr m_msgWindow; nsCOMPtr m_sourceFolder; PRBool m_doNewMailNotification; PRBool m_hasPendingMoves; - nsTArray m_keyBuckets; + nsTArray > m_keyBuckets; PRInt32 m_outstandingMoves; }; diff --git a/mailnews/base/util/nsMsgDBFolder.cpp b/mailnews/base/util/nsMsgDBFolder.cpp index d5c9f411c58..11b353ff37c 100644 --- a/mailnews/base/util/nsMsgDBFolder.cpp +++ b/mailnews/base/util/nsMsgDBFolder.cpp @@ -296,7 +296,7 @@ NS_IMETHODIMP nsMsgDBFolder::EndFolderLoading(void) //GGGG check for new mail here and call SetNewMessages...?? -- ONE OF THE 2 PLACES if(mDatabase) - m_newMsgs.RemoveAll(); + m_newMsgs.Clear(); return NS_OK; } @@ -448,12 +448,12 @@ NS_IMETHODIMP nsMsgDBFolder::ClearNewMessages() rv = mDatabase->GetNewList(&numNewKeys, &newMessageKeys); if (NS_SUCCEEDED(rv) && newMessageKeys) { - m_saveNewMsgs.RemoveAll(); - m_saveNewMsgs.Add(newMessageKeys, numNewKeys); + m_saveNewMsgs.Clear(); + m_saveNewMsgs.AppendElements(newMessageKeys, numNewKeys); } mDatabase->ClearNewList(PR_TRUE); } - m_newMsgs.RemoveAll(); + m_newMsgs.Clear(); mNumNewBiffMessages = 0; return rv; } @@ -463,7 +463,7 @@ void nsMsgDBFolder::UpdateNewMessages() if (! (mFlags & MSG_FOLDER_FLAG_VIRTUAL)) { PRBool hasNewMessages = PR_FALSE; - for (PRUint32 keyIndex = 0; keyIndex < m_newMsgs.GetSize(); keyIndex++) + for (PRUint32 keyIndex = 0; keyIndex < m_newMsgs.Length(); keyIndex++) { PRBool containsKey = PR_FALSE; mDatabase->ContainsKey(m_newMsgs[keyIndex], &containsKey); @@ -779,8 +779,8 @@ nsMsgDBFolder::SetMsgDatabase(nsIMsgDatabase *aMsgDatabase) nsresult rv = mDatabase->GetNewList(&numNewKeys, &newMessageKeys); if (NS_SUCCEEDED(rv) && newMessageKeys) { - m_newMsgs.RemoveAll(); - m_newMsgs.Add(newMessageKeys, numNewKeys); + m_newMsgs.Clear(); + m_newMsgs.AppendElements(newMessageKeys, numNewKeys); } nsMemory::Free(newMessageKeys); } @@ -1212,7 +1212,7 @@ nsMsgDBFolder::MarkAllMessagesRead(void) { // ### fix me need nsIMsgWindow nsresult rv = GetDatabase(nsnull); - m_newMsgs.RemoveAll(); + m_newMsgs.Clear(); if(NS_SUCCEEDED(rv)) { EnableNotifications(allMessageCountNotifications, PR_FALSE, PR_TRUE /*dbBatching*/); @@ -1863,13 +1863,13 @@ nsMsgDBFolder::CallFilterPlugins(nsIMsgWindow *aMsgWindow, PRBool *aFiltersRun) rv = mDatabase->GetNewList(&numNewKeys, &newKeys); NS_ENSURE_SUCCESS(rv, rv); - nsMsgKeyArray newMessageKeys; + nsTArray newMessageKeys; + newMessageKeys.SwapElements(m_saveNewMsgs); if (numNewKeys) - newMessageKeys.Add(newKeys, numNewKeys); + newMessageKeys.AppendElements(newKeys, numNewKeys); - newMessageKeys.InsertAt(0, &m_saveNewMsgs); // if there weren't any, just return - if (!newMessageKeys.GetSize()) + if (newMessageKeys.IsEmpty()) return NS_OK; spamSettings->GetUseWhiteList(&useWhiteList); @@ -1911,8 +1911,8 @@ nsMsgDBFolder::CallFilterPlugins(nsIMsgWindow *aMsgWindow, PRBool *aFiltersRun) // build up list of keys to classify nsCString uri; - nsMsgKeyArray keysToClassify; - PRUint32 numNewMessages = newMessageKeys.GetSize(); + nsTArray keysToClassify; + PRUint32 numNewMessages = newMessageKeys.Length(); for ( PRUint32 i=0 ; i < numNewMessages ; ++i ) { nsCString junkScore; @@ -1970,12 +1970,12 @@ nsMsgDBFolder::CallFilterPlugins(nsIMsgWindow *aMsgWindow, PRBool *aFiltersRun) } } } - keysToClassify.Add(newMessageKeys[i]); + keysToClassify.AppendElement(newMessageKeys[i]); } - if (keysToClassify.GetSize() > 0) + if (!keysToClassify.IsEmpty()) { - PRUint32 numMessagesToClassify = keysToClassify.GetSize(); + PRUint32 numMessagesToClassify = keysToClassify.Length(); char ** messageURIs = (char **) PR_MALLOC(sizeof(const char *) * numMessagesToClassify); if (!messageURIs) return NS_ERROR_OUT_OF_MEMORY; @@ -1996,7 +1996,6 @@ nsMsgDBFolder::CallFilterPlugins(nsIMsgWindow *aMsgWindow, PRBool *aFiltersRun) PR_Free(messageURIs[freeIndex]); PR_Free(messageURIs); } - m_saveNewMsgs.RemoveAll(); return rv; } diff --git a/mailnews/base/util/nsMsgDBFolder.h b/mailnews/base/util/nsMsgDBFolder.h index d3f90c2134d..27929ae45f4 100644 --- a/mailnews/base/util/nsMsgDBFolder.h +++ b/mailnews/base/util/nsMsgDBFolder.h @@ -215,12 +215,12 @@ protected: // want to run junk controls on. This is in addition to "new" hdrs // in the db, which might get cleared because the user clicked away // from the folder. - nsMsgKeyArray m_saveNewMsgs; + nsTArray m_saveNewMsgs; // These are the set of new messages for a folder who has had // its db closed, without the user reading the folder. This // happens with pop3 mail filtered to a different local folder. - nsMsgKeyArray m_newMsgs; + nsTArray m_newMsgs; // // stuff from the uri diff --git a/mailnews/base/util/nsMsgKeyArray.cpp b/mailnews/base/util/nsMsgKeyArray.cpp deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/mailnews/base/util/nsMsgKeyArray.h b/mailnews/base/util/nsMsgKeyArray.h deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/mailnews/base/util/nsMsgKeySet.cpp b/mailnews/base/util/nsMsgKeySet.cpp index 51ec555003b..10e426f4f60 100644 --- a/mailnews/base/util/nsMsgKeySet.cpp +++ b/mailnews/base/util/nsMsgKeySet.cpp @@ -42,7 +42,7 @@ #include "nsMsgKeySet.h" #include "prprf.h" #include "prmem.h" -#include "nsMsgKeyArray.h" +#include "nsTArray.h" #if defined(DEBUG_seth_) || defined(DEBUG_sspitzer_) #define DEBUG_MSGKEYSET 1 @@ -1173,13 +1173,13 @@ nsMsgKeySet::LastMissingRange(PRInt32 min, PRInt32 max, } /** - * Return a copy of this as an nsMsgKeyArray, which is much easier for + * Return a copy of this as an nsTArray, which is much easier for * callers to manipulate. Normal XPCOM calling conventions, although the * array itself isn't refcounted, so the caller should free when done * using NS_DELETEXPCOM(). */ nsresult -nsMsgKeySet::ToMsgKeyArray(nsMsgKeyArray **aArray) +nsMsgKeySet::ToMsgKeyArray(nsTArray **aArray) { PRInt32 size; PRInt32 *head; @@ -1187,8 +1187,8 @@ nsMsgKeySet::ToMsgKeyArray(nsMsgKeyArray **aArray) PRInt32 *end; PRInt32 last_art = -1; - nsMsgKeyArray *array; - NS_NEWXPCOM(array, nsMsgKeyArray); + nsTArray *array; + NS_NEWXPCOM(array, nsTArray); if (!array) return NS_ERROR_OUT_OF_MEMORY; @@ -1220,10 +1220,10 @@ nsMsgKeySet::ToMsgKeyArray(nsMsgKeyArray **aArray) if (from <= to) { if (from < to) { for (PRInt32 i = from; i <= to ; ++i ) { - array->Add(i); + array->AppendElement(i); } } else { - array->Add(from); + array->AppendElement(from); } last_art = to; } diff --git a/mailnews/base/util/nsMsgKeySet.h b/mailnews/base/util/nsMsgKeySet.h index ad4048a33b8..d24948ff64a 100644 --- a/mailnews/base/util/nsMsgKeySet.h +++ b/mailnews/base/util/nsMsgKeySet.h @@ -39,8 +39,7 @@ #define _nsMsgKeySet_H_ #include "msgCore.h" - -class nsMsgKeyArray; +#include "nsTArray.h" // nsMsgKeySet represents a set of articles. Typically, it is the set of // read articles from a .newsrc file, but it can be used for other purposes @@ -103,12 +102,12 @@ public: PRInt32 getLength() {return m_length;} /** - * Return a copy of this as an nsMsgKeyArray, which is much easier for + * Return a copy of this as an nsTArray, which is much easier for * callers to manipulate. Normal XPCOM calling conventions, although the * array itself isn't refcounted, so the caller should free when done * using NS_DELETEXPCOM(). */ - nsresult ToMsgKeyArray(nsMsgKeyArray **aArray); + nsresult ToMsgKeyArray(nsTArray **aArray); #ifdef DEBUG static void RunTests(); diff --git a/mailnews/base/util/nsUInt32Array.cpp b/mailnews/base/util/nsUInt32Array.cpp deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/mailnews/base/util/nsUInt32Array.h b/mailnews/base/util/nsUInt32Array.h deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/mailnews/compose/src/nsMsgCompose.cpp b/mailnews/compose/src/nsMsgCompose.cpp index 7ca8440cbe6..66f08e3ef7e 100644 --- a/mailnews/compose/src/nsMsgCompose.cpp +++ b/mailnews/compose/src/nsMsgCompose.cpp @@ -3541,11 +3541,11 @@ nsMsgComposeSendListener::RemoveCurrentDraftMessage(nsIMsgCompose *compObj, PRBo { nsCAutoString srcStr(str+1); PRInt32 err; - nsMsgKey num = srcStr.ToInteger(&err); - if (num != nsMsgKey_None) + nsMsgKey messageID = srcStr.ToInteger(&err); + if (messageID != nsMsgKey_None) { rv = imapFolder->StoreImapFlags(kImapMsgDeletedFlag, PR_TRUE, - &num, 1, nsnull); + &messageID, 1, nsnull); } } } diff --git a/mailnews/db/msgdb/public/nsDBFolderInfo.h b/mailnews/db/msgdb/public/nsDBFolderInfo.h index 3e4a51aad10..ecb7590c725 100644 --- a/mailnews/db/msgdb/public/nsDBFolderInfo.h +++ b/mailnews/db/msgdb/public/nsDBFolderInfo.h @@ -44,7 +44,7 @@ #include "nsStringGlue.h" #include "MailNewsTypes.h" #include "mdb.h" -#include "nsMsgKeyArray.h" +#include "nsTArray.h" #include "nsIDBFolderInfo.h" #include @@ -87,7 +87,7 @@ public: nsresult GetUint32PropertyWithToken(mdb_token aProperty, PRUint32 &propertyValue, PRUint32 defaultValue = 0); nsresult GetInt32PropertyWithToken(mdb_token aProperty, PRInt32 &propertyValue, PRInt32 defaultValue = 0); - nsMsgKeyArray m_lateredKeys; // list of latered messages + nsTArray m_lateredKeys; // list of latered messages protected: diff --git a/mailnews/db/msgdb/public/nsIMsgDatabase.idl b/mailnews/db/msgdb/public/nsIMsgDatabase.idl index aa9d2af520a..0477198441a 100644 --- a/mailnews/db/msgdb/public/nsIMsgDatabase.idl +++ b/mailnews/db/msgdb/public/nsIMsgDatabase.idl @@ -41,7 +41,7 @@ #include "nsIMsgDBView.idl" %{C++ -#include "nsMsgKeyArray.h" +#include "nsTArray.h" %} interface nsIDBChangeListener; @@ -103,8 +103,8 @@ interface nsMsgDBCommitType const long kCompressCommit = 3; }; -[ref] native nsMsgKeyArrayRef(nsMsgKeyArray); -[ptr] native nsMsgKeyArrayPtr(nsMsgKeyArray); +[ref] native nsMsgKeyArrayRef(nsTArray); +[ptr] native nsMsgKeyArrayPtr(nsTArray); [scriptable, uuid(03223c50-1e88-45e8-ba1a-7ce792dc3fc3)] interface nsIMsgDBService : nsISupports diff --git a/mailnews/db/msgdb/public/nsMailDatabase.h b/mailnews/db/msgdb/public/nsMailDatabase.h index 435278fd231..11e19e3a728 100644 --- a/mailnews/db/msgdb/public/nsMailDatabase.h +++ b/mailnews/db/msgdb/public/nsMailDatabase.h @@ -41,9 +41,9 @@ #include "nsMsgDatabase.h" #include "nsMsgMessageFlags.h" #include "nsILocalFile.h" +#include "nsTArray.h" // This is the subclass of nsMsgDatabase that handles local mail messages. -class nsMsgKeyArray; class nsIOFileStream; class nsILocalFile; class nsOfflineImapOperation; @@ -55,7 +55,7 @@ public: virtual ~nsMailDatabase(); NS_IMETHOD Open(nsILocalFile *aFolderName, PRBool create, PRBool upgrading); NS_IMETHOD ForceClosed(); - NS_IMETHOD DeleteMessages(nsMsgKeyArray* nsMsgKeys, nsIDBChangeListener *instigator); + NS_IMETHOD DeleteMessages(nsTArray* nsMsgKeys, nsIDBChangeListener *instigator); NS_IMETHOD StartBatch(); NS_IMETHOD EndBatch(); @@ -73,8 +73,8 @@ public: NS_IMETHOD GetSummaryValid(PRBool *valid); NS_IMETHOD EnumerateOfflineOps(nsISimpleEnumerator **enumerator); - NS_IMETHOD ListAllOfflineOpIds(nsMsgKeyArray *offlineOpIds); - NS_IMETHOD ListAllOfflineDeletes(nsMsgKeyArray *offlineDeletes); + NS_IMETHOD ListAllOfflineOpIds(nsTArray *offlineOpIds); + NS_IMETHOD ListAllOfflineDeletes(nsTArray *offlineDeletes); NS_IMETHOD SetFolderStream(nsIOutputStream *aFileStream); NS_IMETHOD GetFolderStream(nsIOutputStream **aFileStream); diff --git a/mailnews/db/msgdb/public/nsMsgDatabase.h b/mailnews/db/msgdb/public/nsMsgDatabase.h index e67cc1bd233..a41c755a88b 100644 --- a/mailnews/db/msgdb/public/nsMsgDatabase.h +++ b/mailnews/db/msgdb/public/nsMsgDatabase.h @@ -53,8 +53,8 @@ #include "nsCOMPtr.h" #include "nsCOMArray.h" #include "pldhash.h" +#include "nsTArray.h" class ListContext; -class nsMsgKeyArray; class nsMsgKeySet; class nsMsgThread; class nsIMsgThread; @@ -96,7 +96,7 @@ public: nsresult GetSearchResultsTable(const char *searchFolderUri, PRBool createIfMissing, nsIMdbTable **table); // this might just be for debugging - we'll see. - nsresult ListAllThreads(nsMsgKeyArray *threadIds); + nsresult ListAllThreads(nsTArray *threadIds); ////////////////////////////////////////////////////////////////////////////// // nsMsgDatabase methods: nsMsgDatabase(); @@ -241,7 +241,7 @@ protected: nsIMdbTable *m_mdbAllMsgHeadersTable; nsIMdbTable *m_mdbAllThreadsTable; nsCString m_dbName; - nsMsgKeyArray m_newSet; // new messages since last open. + nsTArray m_newSet; // new messages since last open. PRBool m_mdbTokensInitialized; nsCOMPtr m_ChangeListeners; mdb_token m_hdrRowScopeToken; diff --git a/mailnews/db/msgdb/public/nsNewsDatabase.h b/mailnews/db/msgdb/public/nsNewsDatabase.h index 661f45369d4..be9e7056085 100644 --- a/mailnews/db/msgdb/public/nsNewsDatabase.h +++ b/mailnews/db/msgdb/public/nsNewsDatabase.h @@ -39,9 +39,9 @@ #include "nsMsgDatabase.h" #include "nsINewsDatabase.h" +#include "nsTArray.h" class nsIDBChangeListener; -class nsMsgKeyArray; class MSG_RetrieveArtInfo; class MSG_PurgeInfo; // news group database @@ -66,7 +66,7 @@ public: NS_IMETHOD GetHighWaterArticleNum(nsMsgKey *key); NS_IMETHOD GetLowWaterArticleNum(nsMsgKey *key); - NS_IMETHOD MarkAllRead(nsMsgKeyArray *thoseMarked); + NS_IMETHOD MarkAllRead(nsTArray *thoseMarked); virtual nsresult ExpireUpTo(nsMsgKey expireKey); virtual nsresult ExpireRange(nsMsgKey startRange, nsMsgKey endRange); diff --git a/mailnews/db/msgdb/src/nsMailDatabase.cpp b/mailnews/db/msgdb/src/nsMailDatabase.cpp index a45571a3660..897628ebb15 100644 --- a/mailnews/db/msgdb/src/nsMailDatabase.cpp +++ b/mailnews/db/msgdb/src/nsMailDatabase.cpp @@ -165,7 +165,7 @@ NS_IMETHODIMP nsMailDatabase::EndBatch() return NS_OK; } -NS_IMETHODIMP nsMailDatabase::DeleteMessages(nsMsgKeyArray* nsMsgKeys, nsIDBChangeListener *instigator) +NS_IMETHODIMP nsMailDatabase::DeleteMessages(nsTArray* nsMsgKeys, nsIDBChangeListener *instigator) { nsresult rv; if (!m_folderStream && m_folder) @@ -594,7 +594,7 @@ NS_IMETHODIMP nsMailDatabase::EnumerateOfflineOps(nsISimpleEnumerator **enumerat } -NS_IMETHODIMP nsMailDatabase::ListAllOfflineOpIds(nsMsgKeyArray *offlineOpIds) +NS_IMETHODIMP nsMailDatabase::ListAllOfflineOpIds(nsTArray *offlineOpIds) { NS_ENSURE_ARG(offlineOpIds); nsresult rv = GetAllOfflineOpsTable(); @@ -617,7 +617,7 @@ NS_IMETHODIMP nsMailDatabase::ListAllOfflineOpIds(nsMsgKeyArray *offlineOpIds) break; if (err == NS_OK) { - offlineOpIds->Add(outOid.mOid_Id); + offlineOpIds->AppendElement(outOid.mOid_Id); if (PR_LOG_TEST(IMAPOffline, PR_LOG_ALWAYS)) { nsCOMPtr offlineOp; @@ -636,11 +636,11 @@ NS_IMETHODIMP nsMailDatabase::ListAllOfflineOpIds(nsMsgKeyArray *offlineOpIds) rowCursor->Release(); } - offlineOpIds->QuickSort(); + offlineOpIds->Sort(); return rv; } -NS_IMETHODIMP nsMailDatabase::ListAllOfflineDeletes(nsMsgKeyArray *offlineDeletes) +NS_IMETHODIMP nsMailDatabase::ListAllOfflineDeletes(nsTArray *offlineDeletes) { if (!offlineDeletes) return NS_ERROR_NULL_POINTER; @@ -676,7 +676,7 @@ NS_IMETHODIMP nsMailDatabase::ListAllOfflineDeletes(nsMsgKeyArray *offlineDelete if (opType & nsIMsgOfflineImapOperation::kMsgMoved || ((opType & nsIMsgOfflineImapOperation::kFlagsChanged) && (newFlags & nsIMsgOfflineImapOperation::kMsgMarkedDeleted))) - offlineDeletes->Add(outOid.mOid_Id); + offlineDeletes->AppendElement(outOid.mOid_Id); NS_RELEASE(offlineOp); } offlineOpRow->Release(); diff --git a/mailnews/db/msgdb/src/nsMsgDatabase.cpp b/mailnews/db/msgdb/src/nsMsgDatabase.cpp index ae8e0cbbbec..851d57ed52e 100644 --- a/mailnews/db/msgdb/src/nsMsgDatabase.cpp +++ b/mailnews/db/msgdb/src/nsMsgDatabase.cpp @@ -1766,12 +1766,12 @@ NS_IMETHODIMP nsMsgDatabase::DeleteMessage(nsMsgKey key, nsIDBChangeListener *in } -NS_IMETHODIMP nsMsgDatabase::DeleteMessages(nsMsgKeyArray* nsMsgKeys, nsIDBChangeListener *instigator) +NS_IMETHODIMP nsMsgDatabase::DeleteMessages(nsTArray* nsMsgKeys, nsIDBChangeListener *instigator) { nsresult err = NS_OK; PRUint32 kindex; - for (kindex = 0; kindex < nsMsgKeys->GetSize(); kindex++) + for (kindex = 0; kindex < nsMsgKeys->Length(); kindex++) { nsMsgKey key = nsMsgKeys->ElementAt(kindex); nsCOMPtr msgHdr; @@ -1922,7 +1922,7 @@ PRUint32 nsMsgDatabase::GetStatusFlags(nsIMsgDBHdr *msgHdr, PRUint32 origFlags) nsMsgKey key; (void)msgHdr->GetMessageKey(&key); - if (m_newSet.GetSize() > 0 && m_newSet[m_newSet.GetSize() - 1] == key || m_newSet.IndexOfSorted(key) != kNotFound) + if (!m_newSet.IsEmpty() && m_newSet[m_newSet.Length() - 1] == key || m_newSet.BinaryIndexOf(key) != kNotFound) statusFlags |= MSG_FLAG_NEW; else statusFlags &= ~MSG_FLAG_NEW; @@ -2065,7 +2065,7 @@ NS_IMETHODIMP nsMsgDatabase::MarkHasAttachments(nsMsgKey key, PRBool bHasAttachm } NS_IMETHODIMP -nsMsgDatabase::MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsMsgKeyArray *thoseMarked) +nsMsgDatabase::MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instigator, nsTArray *thoseMarked) { if (!thread) return NS_ERROR_NULL_POINTER; @@ -2088,7 +2088,7 @@ nsMsgDatabase::MarkThreadRead(nsIMsgThread *thread, nsIDBChangeListener *instiga { nsMsgKey key; if (NS_SUCCEEDED(child->GetMessageKey(&key))) - thoseMarked->Add(key); + thoseMarked->AppendElement(key); } MarkHdrRead(child, PR_TRUE, instigator); } @@ -2368,7 +2368,7 @@ NS_IMETHODIMP nsMsgDatabase::MarkHdrMarked(nsIMsgDBHdr *msgHdr, PRBool mark, } -NS_IMETHODIMP nsMsgDatabase::MarkAllRead(nsMsgKeyArray *thoseMarked) +NS_IMETHODIMP nsMsgDatabase::MarkAllRead(nsTArray *thoseMarked) { nsresult rv; nsMsgHdr *pHeader; @@ -2395,7 +2395,7 @@ NS_IMETHODIMP nsMsgDatabase::MarkAllRead(nsMsgKeyArray *thoseMarked) { nsMsgKey key; (void)pHeader->GetMessageKey(&key); - thoseMarked->Add(key); + thoseMarked->AppendElement(key); } rv = MarkHdrRead(pHeader, PR_TRUE, nsnull); // ### dmb - blow off error? } @@ -2412,7 +2412,7 @@ NS_IMETHODIMP nsMsgDatabase::MarkAllRead(nsMsgKeyArray *thoseMarked) return rv; } -NS_IMETHODIMP nsMsgDatabase::MarkReadByDate (PRTime startDate, PRTime endDate, nsMsgKeyArray *markedIds) +NS_IMETHODIMP nsMsgDatabase::MarkReadByDate (PRTime startDate, PRTime endDate, nsTArray *markedIds) { nsresult rv; nsMsgHdr *pHeader; @@ -2448,7 +2448,7 @@ NS_IMETHODIMP nsMsgDatabase::MarkReadByDate (PRTime startDate, PRTime endDate, n { numChanged++; if (markedIds) - markedIds->Add(key); + markedIds->AppendElement(key); rv = MarkHdrRead(pHeader, PR_TRUE, NULL); // ### dmb - blow off error? } } @@ -2463,9 +2463,8 @@ NS_IMETHODIMP nsMsgDatabase::MarkReadByDate (PRTime startDate, PRTime endDate, n NS_IMETHODIMP nsMsgDatabase::AddToNewList(nsMsgKey key) { // we add new keys in increasing order... - if (m_newSet.GetSize() == 0 - || (m_newSet[m_newSet.GetSize() - 1] < key)) - m_newSet.Add(key); + if (m_newSet.IsEmpty() || (m_newSet[m_newSet.Length() - 1] < key)) + m_newSet.AppendElement(key); return NS_OK; } @@ -2473,15 +2472,14 @@ NS_IMETHODIMP nsMsgDatabase::AddToNewList(nsMsgKey key) NS_IMETHODIMP nsMsgDatabase::ClearNewList(PRBool notify /* = FALSE */) { nsresult err = NS_OK; - if (notify && m_newSet.GetSize() > 0) // need to update view + if (notify && !m_newSet.IsEmpty()) // need to update view { - nsMsgKeyArray saveNewSet; - saveNewSet.CopyArray(m_newSet); + nsTArray saveNewSet; // clear m_newSet so that the code that's listening to the key change // doesn't think we have new messages and send notifications all over // that we have new messages. - m_newSet.RemoveAll(); - for (PRUint32 elementIndex = saveNewSet.GetSize() - 1; ; elementIndex--) + saveNewSet.SwapElements(m_newSet); + for (PRUint32 elementIndex = saveNewSet.Length() - 1; ; elementIndex--) { nsMsgKey lastNewKey = saveNewSet.ElementAt(elementIndex); nsCOMPtr msgHdr; @@ -2505,7 +2503,7 @@ NS_IMETHODIMP nsMsgDatabase::HasNew(PRBool *_retval) { if (!_retval) return NS_ERROR_NULL_POINTER; - *_retval = (m_newSet.GetSize() > 0); + *_retval = (m_newSet.Length() > 0); return NS_OK; } @@ -2728,7 +2726,7 @@ nsMsgDatabase::SyncCounts() // resulting output array is sorted by key. -NS_IMETHODIMP nsMsgDatabase::ListAllKeys(nsMsgKeyArray &outputKeys) +NS_IMETHODIMP nsMsgDatabase::ListAllKeys(nsTArray &outputKeys) { nsresult err = NS_OK; nsIMdbTableRowCursor *rowCursor; @@ -2745,11 +2743,11 @@ NS_IMETHODIMP nsMsgDatabase::ListAllKeys(nsMsgKeyArray &outputKeys) if (outPos < 0 || outOid.mOid_Id == (mdb_id) -1) break; if (err == NS_OK) - outputKeys.Add(outOid.mOid_Id); + outputKeys.AppendElement(outOid.mOid_Id); } rowCursor->Release(); } - outputKeys.QuickSort(); + outputKeys.Sort(); return err; } @@ -3343,7 +3341,7 @@ nsresult nsMsgDatabase::CharPtrToRowCellColumn(nsIMdbRow *row, mdb_token columnT return row->AddColumn(GetEnv(), columnToken, &yarn); } -// caller must PR_FREEIF result +// caller must NS_Free result nsresult nsMsgDatabase::RowCellColumnToCharPtr(nsIMdbRow *row, mdb_token columnToken, char **result) { nsresult err = NS_ERROR_NULL_POINTER; @@ -3354,13 +3352,12 @@ nsresult nsMsgDatabase::RowCellColumnToCharPtr(nsIMdbRow *row, mdb_token columnT err = row->AliasCellYarn(GetEnv(), columnToken, &yarn); if (err == NS_OK) { - *result = (char *) PR_CALLOC(yarn.mYarn_Fill + 1); + *result = (char *)NS_Alloc(yarn.mYarn_Fill + 1); if (*result) { if (yarn.mYarn_Fill > 0) memcpy(*result, yarn.mYarn_Buf, yarn.mYarn_Fill); - else - **result = 0; + result[yarn.mYarn_Fill] = '\0'; } else err = NS_ERROR_OUT_OF_MEMORY; @@ -4214,7 +4211,7 @@ nsresult nsMsgDatabase::GetIntPref(const char *prefName, PRInt32 *result) } -nsresult nsMsgDatabase::ListAllThreads(nsMsgKeyArray *threadIds) +nsresult nsMsgDatabase::ListAllThreads(nsTArray *threadIds) { nsresult rv; nsMsgThread *pThread; @@ -4232,7 +4229,7 @@ nsresult nsMsgDatabase::ListAllThreads(nsMsgKeyArray *threadIds) if (threadIds) { nsMsgKey key; (void)pThread->GetThreadKey(&key); - threadIds->Add(key); + threadIds->AppendElement(key); } // NS_RELEASE(pThread); pThread = nsnull; @@ -4259,7 +4256,7 @@ NS_IMETHODIMP nsMsgDatabase::RemoveOfflineOp(nsIMsgOfflineImapOperation *op) } -NS_IMETHODIMP nsMsgDatabase::ListAllOfflineMsgs(nsMsgKeyArray *outputKeys) +NS_IMETHODIMP nsMsgDatabase::ListAllOfflineMsgs(nsTArray *outputKeys) { nsCOMPtr enumerator; PRUint32 flag = MSG_FLAG_OFFLINE; @@ -4283,11 +4280,11 @@ NS_IMETHODIMP nsMsgDatabase::ListAllOfflineMsgs(nsMsgKeyArray *outputKeys) { nsMsgKey msgKey; dbMessage->GetMessageKey(&msgKey); - outputKeys->Add(msgKey); + outputKeys->AppendElement(msgKey); } } } - outputKeys->QuickSort(); + outputKeys->Sort(); return rv; } @@ -4298,13 +4295,13 @@ NS_IMETHODIMP nsMsgDatabase::EnumerateOfflineOps(nsISimpleEnumerator **enumerato return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsMsgDatabase::ListAllOfflineOpIds(nsMsgKeyArray *offlineOpIds) +NS_IMETHODIMP nsMsgDatabase::ListAllOfflineOpIds(nsTArray *offlineOpIds) { NS_ASSERTION(PR_FALSE, "overridden by nsMailDatabase"); return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsMsgDatabase::ListAllOfflineDeletes(nsMsgKeyArray *offlineDeletes) +NS_IMETHODIMP nsMsgDatabase::ListAllOfflineDeletes(nsTArray *offlineDeletes) { nsresult ret = NS_OK; if (!offlineDeletes) @@ -4366,9 +4363,9 @@ nsresult nsMsgDatabase::DumpContents() nsMsgKey key; PRUint32 i; - nsMsgKeyArray keys; + nsTArray keys; nsresult rv = ListAllKeys(keys); - for (i = 0; i < keys.GetSize(); i++) { + for (i = 0; i < keys.Length(); i++) { key = keys[i]; nsIMsgDBHdr *msg = NULL; rv = GetMsgHdrForKey(key, &msg); @@ -4385,9 +4382,9 @@ nsresult nsMsgDatabase::DumpContents() NS_RELEASE(msgHdr); } } - nsMsgKeyArray threads; + nsTArray threads; rv = ListAllThreads(&threads); - for ( i = 0; i < threads.GetSize(); i++) + for ( i = 0; i < threads.Length(); i++) { key = threads[i]; printf("thread key = %u\n", key); @@ -4639,7 +4636,7 @@ nsresult nsMsgDatabase::PurgeMessagesOlderThan(PRUint32 daysToKeepHdrs, nsMsgHdr *pHeader; nsCOMPtr hdrs; rv = EnumerateMessages(getter_AddRefs(hdrs)); - nsMsgKeyArray keysToDelete; + nsTArray keysToDelete; if (NS_FAILED(rv)) return rv; @@ -4684,7 +4681,7 @@ nsresult nsMsgDatabase::PurgeMessagesOlderThan(PRUint32 daysToKeepHdrs, { nsMsgKey msgKey; pHeader->GetMessageKey(&msgKey); - keysToDelete.Add(msgKey); + keysToDelete.AppendElement(msgKey); if (hdrsToDelete) hdrsToDelete->AppendElement(pHeader); } @@ -4695,9 +4692,9 @@ nsresult nsMsgDatabase::PurgeMessagesOlderThan(PRUint32 daysToKeepHdrs, { DeleteMessages(&keysToDelete, nsnull); - if (keysToDelete.GetSize() > 10) // compress commit if we deleted more than 10 + if (keysToDelete.Length() > 10) // compress commit if we deleted more than 10 Commit(nsMsgDBCommitType::kCompressCommit); - else if (keysToDelete.GetSize() > 0) + else if (!keysToDelete.IsEmpty()) Commit(nsMsgDBCommitType::kLargeCommit); } return rv; @@ -4713,7 +4710,7 @@ nsresult nsMsgDatabase::PurgeExcessMessages(PRUint32 numHeadersToKeep, PRBool ke if (NS_FAILED(rv)) return rv; PRBool hasMore = PR_FALSE; - nsMsgKeyArray keysToDelete; + nsTArray keysToDelete; mdb_count numHdrs = 0; if (m_mdbAllMsgHeadersTable) @@ -4745,7 +4742,7 @@ nsresult nsMsgDatabase::PurgeExcessMessages(PRUint32 numHeadersToKeep, PRBool ke { nsMsgKey msgKey; pHeader->GetMessageKey(&msgKey); - keysToDelete.Add(msgKey); + keysToDelete.AppendElement(msgKey); numHdrs--; if (hdrsToDelete) hdrsToDelete->AppendElement(pHeader); @@ -4755,7 +4752,7 @@ nsresult nsMsgDatabase::PurgeExcessMessages(PRUint32 numHeadersToKeep, PRBool ke if (!hdrsToDelete) { - PRInt32 numKeysToDelete = keysToDelete.GetSize(); + PRInt32 numKeysToDelete = keysToDelete.Length(); if (numKeysToDelete > 0) { DeleteMessages(&keysToDelete, nsnull); @@ -5003,13 +5000,13 @@ nsMsgDatabase::GetNewList(PRUint32 *aCount, PRUint32 **aNewKeys) NS_ENSURE_ARG_POINTER(aCount); NS_ENSURE_ARG_POINTER(aNewKeys); - *aCount = m_newSet.GetSize(); + *aCount = m_newSet.Length(); if (*aCount > 0) { *aNewKeys = static_cast(nsMemory::Alloc(*aCount * sizeof(PRUint32))); if (!*aNewKeys) return NS_ERROR_OUT_OF_MEMORY; - memcpy(*aNewKeys, m_newSet.GetArray(), *aCount * sizeof(PRUint32)); + memcpy(*aNewKeys, m_newSet.Elements(), *aCount * sizeof(PRUint32)); return NS_OK; } // if there were no new messages, signal this by returning a null pointer @@ -5062,7 +5059,7 @@ NS_IMETHODIMP nsMsgDatabase::RefreshCache(const char *aSearchFolderUri, PRUint32 PRUint32 rowCount; table->GetCount(GetEnv(), &rowCount); - nsMsgKeyArray staleHits; + nsTArray staleHits; // should assert that each array is sorted while (newHitIndex < aNumKeys || tableRowIndex < rowCount) { @@ -5109,19 +5106,19 @@ NS_IMETHODIMP nsMsgDatabase::RefreshCache(const char *aSearchFolderUri, PRUint32 } else if (newHitIndex >= aNumKeys || aNewHits[newHitIndex] > tableRowKey) { - staleHits.Add(tableRowKey); + staleHits.AppendElement(tableRowKey); table->CutOid(GetEnv(), &oid); rowCount--; continue; // don't increment tableRowIndex since we removed that row. } } - *aNumBadHits = staleHits.GetSize(); + *aNumBadHits = staleHits.Length(); if (*aNumBadHits) { *aStaleHits = static_cast(nsMemory::Alloc(*aNumBadHits * sizeof(PRUint32))); if (!*aStaleHits) return NS_ERROR_OUT_OF_MEMORY; - memcpy(*aStaleHits, staleHits.GetArray(), *aNumBadHits * sizeof(PRUint32)); + memcpy(*aStaleHits, staleHits.Elements(), *aNumBadHits * sizeof(PRUint32)); } else *aStaleHits = nsnull; diff --git a/mailnews/db/msgdb/src/nsNewsDatabase.cpp b/mailnews/db/msgdb/src/nsNewsDatabase.cpp index d2f11a74fbd..cf99e5a0b66 100644 --- a/mailnews/db/msgdb/src/nsNewsDatabase.cpp +++ b/mailnews/db/msgdb/src/nsNewsDatabase.cpp @@ -253,7 +253,7 @@ PRBool nsNewsDatabase::SetHdrReadFlag(nsIMsgDBHdr *msgHdr, PRBool bRead) return PR_TRUE; } -NS_IMETHODIMP nsNewsDatabase::MarkAllRead(nsMsgKeyArray *thoseMarked) +NS_IMETHODIMP nsNewsDatabase::MarkAllRead(nsTArray *thoseMarked) { nsMsgKey lowWater = nsMsgKey_None, highWater; nsCString knownArts; diff --git a/mailnews/imap/src/nsImapFlagAndUidState.cpp b/mailnews/imap/src/nsImapFlagAndUidState.cpp index f1fb81f6e20..2a0568116fc 100644 --- a/mailnews/imap/src/nsImapFlagAndUidState.cpp +++ b/mailnews/imap/src/nsImapFlagAndUidState.cpp @@ -120,7 +120,7 @@ nsImapFlagAndUidState::nsImapFlagAndUidState(PRInt32 numberOfMessages, PRUint16 fNumberOfMessageSlotsAllocated = kImapFlagAndUidStateSize; fFlags = (imapMessageFlagsType*) PR_Malloc(sizeof(imapMessageFlagsType) * fNumberOfMessageSlotsAllocated); // new imapMessageFlagsType[fNumberOfMessageSlotsAllocated]; - fUids.SetSize(fNumberOfMessageSlotsAllocated); + fUids.InsertElementsAt(0, fNumberOfMessageSlotsAllocated, 0); memset(fFlags, 0, sizeof(imapMessageFlagsType) * fNumberOfMessageSlotsAllocated); fSupportedUserFlags = flags; fNumberDeleted = 0; @@ -134,7 +134,7 @@ nsImapFlagAndUidState::nsImapFlagAndUidState(const nsImapFlagAndUidState& state, fNumberOfMessageSlotsAllocated = state.fNumberOfMessageSlotsAllocated; fFlags = (imapMessageFlagsType*) PR_Malloc(sizeof(imapMessageFlagsType) * fNumberOfMessageSlotsAllocated); // new imapMessageFlagsType[fNumberOfMessageSlotsAllocated]; - fUids.CopyArray((nsMsgKeyArray *) &state.fUids); + fUids = state.fUids; memcpy(fFlags, state.fFlags, sizeof(imapMessageFlagsType) * fNumberOfMessageSlotsAllocated); fSupportedUserFlags = flags; @@ -200,7 +200,7 @@ NS_IMETHODIMP nsImapFlagAndUidState::ExpungeByIndex(PRUint32 msgIndex) fNumberDeleted--; for (counter = msgIndex; counter < (PRUint32) fNumberOfMessagesAdded; counter++) { - fUids[counter] = fUids[counter + 1]; + fUids[counter] = fUids[counter + 1]; fFlags[counter] = fFlags[counter + 1]; } @@ -224,7 +224,7 @@ NS_IMETHODIMP nsImapFlagAndUidState::AddUidFlagPair(PRUint32 uid, imapMessageFla if (fNumberOfMessagesAdded >= fNumberOfMessageSlotsAllocated) { fNumberOfMessageSlotsAllocated += kImapFlagAndUidStateSize; - fUids.SetSize(fNumberOfMessageSlotsAllocated); + fUids.InsertElementsAt(fUids.Length(), kImapFlagAndUidStateSize, 0); fFlags = (imapMessageFlagsType*) PR_REALLOC(fFlags, sizeof(imapMessageFlagsType) * fNumberOfMessageSlotsAllocated); // new imapMessageFlagsType[fNumberOfMessageSlotsAllocated]; if (!fFlags) return NS_ERROR_OUT_OF_MEMORY; diff --git a/mailnews/imap/src/nsImapFlagAndUidState.h b/mailnews/imap/src/nsImapFlagAndUidState.h index 78c84b45b6c..75856106e66 100644 --- a/mailnews/imap/src/nsImapFlagAndUidState.h +++ b/mailnews/imap/src/nsImapFlagAndUidState.h @@ -38,7 +38,8 @@ #ifndef nsImapFlagAndUidState_h___ #define nsImapFlagAndUidState_h___ -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsIImapFlagAndUidState.h" const PRInt32 kImapFlagAndUidStateSize = 100; @@ -71,7 +72,7 @@ private: PRInt32 fNumberOfMessagesAdded; PRInt32 fNumberOfMessageSlotsAllocated; PRInt32 fNumberDeleted; - nsMsgKeyArray fUids; + nsTArray fUids; imapMessageFlagsType *fFlags; nsDataHashtable m_customFlagsHash; // Hash table, mapping uids to extra flags PRUint16 fSupportedUserFlags; diff --git a/mailnews/imap/src/nsImapMailFolder.cpp b/mailnews/imap/src/nsImapMailFolder.cpp index f0590986933..9837f990155 100644 --- a/mailnews/imap/src/nsImapMailFolder.cpp +++ b/mailnews/imap/src/nsImapMailFolder.cpp @@ -120,8 +120,6 @@ #include "nsCExternalHandlerService.h" static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); -static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID); -static NS_DEFINE_CID(kCImapDB, NS_IMAPDB_CID); static NS_DEFINE_CID(kParseMailMsgStateCID, NS_PARSEMAILMSGSTATE_CID); static NS_DEFINE_CID(kCImapHostSessionList, NS_IIMAPHOSTSESSIONLIST_CID); @@ -1709,11 +1707,11 @@ nsImapMailFolder::MarkMessagesRead(nsISupportsArray *messages, PRBool markRead) if (NS_SUCCEEDED(rv)) { nsCAutoString messageIds; - nsMsgKeyArray keysToMarkRead; + nsTArray keysToMarkRead; rv = BuildIdsAndKeyArray(messages, messageIds, keysToMarkRead); if (NS_FAILED(rv)) return rv; - StoreImapFlags(kImapMsgSeenFlag, markRead, keysToMarkRead.GetArray(), keysToMarkRead.GetSize(), nsnull); + StoreImapFlags(kImapMsgSeenFlag, markRead, keysToMarkRead.Elements(), keysToMarkRead.Length(), nsnull); rv = GetDatabase(nsnull); if (NS_SUCCEEDED(rv)) mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); @@ -1730,10 +1728,10 @@ nsImapMailFolder::SetLabelForMessages(nsISupportsArray *aMessages, nsMsgLabelVal if (NS_SUCCEEDED(rv)) { nsCAutoString messageIds; - nsMsgKeyArray keysToLabel; + nsTArray keysToLabel; nsresult rv = BuildIdsAndKeyArray(aMessages, messageIds, keysToLabel); NS_ENSURE_SUCCESS(rv, rv); - StoreImapFlags((aLabel << 9), PR_TRUE, keysToLabel.GetArray(), keysToLabel.GetSize(), nsnull); + StoreImapFlags((aLabel << 9), PR_TRUE, keysToLabel.Elements(), keysToLabel.Length(), nsnull); rv = GetDatabase(nsnull); if (NS_SUCCEEDED(rv)) mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); @@ -1747,14 +1745,14 @@ nsImapMailFolder::MarkAllMessagesRead(void) nsresult rv = GetDatabase(nsnull); if(NS_SUCCEEDED(rv)) { - nsMsgKeyArray thoseMarked; + nsTArray thoseMarked; EnableNotifications(allMessageCountNotifications, PR_FALSE, PR_TRUE /*dbBatching*/); rv = mDatabase->MarkAllRead(&thoseMarked); EnableNotifications(allMessageCountNotifications, PR_TRUE, PR_TRUE /*dbBatching*/); if (NS_SUCCEEDED(rv)) { - rv = StoreImapFlags(kImapMsgSeenFlag, PR_TRUE, thoseMarked.GetArray(), - thoseMarked.GetSize(), nsnull); + rv = StoreImapFlags(kImapMsgSeenFlag, PR_TRUE, thoseMarked.Elements(), + thoseMarked.Length(), nsnull); mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); } } @@ -1766,12 +1764,12 @@ NS_IMETHODIMP nsImapMailFolder::MarkThreadRead(nsIMsgThread *thread) nsresult rv = GetDatabase(nsnull); if(NS_SUCCEEDED(rv)) { - nsMsgKeyArray thoseMarked; + nsTArray thoseMarked; rv = mDatabase->MarkThreadRead(thread, nsnull, &thoseMarked); if (NS_SUCCEEDED(rv)) { - rv = StoreImapFlags(kImapMsgSeenFlag, PR_TRUE, thoseMarked.GetArray(), - thoseMarked.GetSize(), nsnull); + rv = StoreImapFlags(kImapMsgSeenFlag, PR_TRUE, thoseMarked.Elements(), + thoseMarked.Length(), nsnull); mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); } } @@ -1817,11 +1815,11 @@ nsImapMailFolder::MarkMessagesFlagged(nsISupportsArray *messages, PRBool markFla if (NS_SUCCEEDED(rv)) { nsCAutoString messageIds; - nsMsgKeyArray keysToMarkFlagged; + nsTArray keysToMarkFlagged; rv = BuildIdsAndKeyArray(messages, messageIds, keysToMarkFlagged); if (NS_FAILED(rv)) return rv; - rv = StoreImapFlags(kImapMsgFlaggedFlag, markFlagged, keysToMarkFlagged.GetArray(), - keysToMarkFlagged.GetSize(), nsnull); + rv = StoreImapFlags(kImapMsgFlaggedFlag, markFlagged, keysToMarkFlagged.Elements(), + keysToMarkFlagged.Length(), nsnull); mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); } return rv; @@ -1908,7 +1906,7 @@ nsImapMailFolder::GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDatab nsresult nsImapMailFolder::BuildIdsAndKeyArray(nsISupportsArray* messages, nsCString& msgIds, - nsMsgKeyArray& keyArray) + nsTArray& keyArray) { NS_ENSURE_ARG_POINTER(messages); nsresult rv; @@ -1925,9 +1923,9 @@ nsImapMailFolder::BuildIdsAndKeyArray(nsISupportsArray* messages, if (msgDBHdr) rv = msgDBHdr->GetMessageKey(&key); if (NS_SUCCEEDED(rv)) - keyArray.Add(key); + keyArray.AppendElement(key); } - return AllocateUidStringFromKeys(keyArray.GetArray(), keyArray.GetSize(), msgIds); + return AllocateUidStringFromKeys(keyArray.Elements(), keyArray.Length(), msgIds); } static int PR_CALLBACK CompareKey (const void *v1, const void *v2, void *) @@ -1985,9 +1983,9 @@ nsImapMailFolder::AllocateUidStringFromKeys(nsMsgKey *keys, PRUint32 numKeys, ns return rv; } -nsresult nsImapMailFolder::MarkMessagesImapDeleted(nsMsgKeyArray *keyArray, PRBool deleted, nsIMsgDatabase *db) +nsresult nsImapMailFolder::MarkMessagesImapDeleted(nsTArray *keyArray, PRBool deleted, nsIMsgDatabase *db) { - for (PRUint32 kindex = 0; kindex < keyArray->GetSize(); kindex++) + for (PRUint32 kindex = 0; kindex < keyArray->Length(); kindex++) { nsMsgKey key = keyArray->ElementAt(kindex); db->MarkImapDeleted(key, deleted, nsnull); @@ -2007,7 +2005,7 @@ NS_IMETHODIMP nsImapMailFolder::DeleteMessages(nsISupportsArray *messages, nsCAutoString uri; PRBool deleteImmediatelyNoTrash = PR_FALSE; nsCAutoString messageIds; - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; PRBool deleteMsgs = PR_TRUE; //used for toggling delete status - default is true nsMsgImapDeleteModel deleteModel = nsMsgImapDeleteModels::MoveToTrash; imapMessageFlagsType messageFlags = kImapMsgDeletedFlag; @@ -2100,8 +2098,8 @@ NS_IMETHODIMP nsImapMailFolder::DeleteMessages(nsISupportsArray *messages, nsCOMPtr urlListener = do_QueryInterface(listener); if (deleteMsgs) messageFlags |= kImapMsgSeenFlag; - rv = StoreImapFlags(messageFlags, deleteMsgs, srcKeyArray.GetArray(), - srcKeyArray.GetSize(), urlListener); + rv = StoreImapFlags(messageFlags, deleteMsgs, srcKeyArray.Elements(), + srcKeyArray.Length(), urlListener); if (NS_SUCCEEDED(rv)) { @@ -2331,7 +2329,7 @@ NS_IMETHODIMP nsImapMailFolder::Shutdown(PRBool shutdownChildren) return nsMsgDBFolder::Shutdown(shutdownChildren); } -nsresult nsImapMailFolder::GetBodysToDownload(nsMsgKeyArray *keysOfMessagesToDownload) +nsresult nsImapMailFolder::GetBodysToDownload(nsTArray *keysOfMessagesToDownload) { NS_ENSURE_ARG(keysOfMessagesToDownload); NS_ENSURE_TRUE(mDatabase, NS_ERROR_FAILURE); @@ -2355,7 +2353,7 @@ nsresult nsImapMailFolder::GetBodysToDownload(nsMsgKeyArray *keysOfMessagesToDow else ShouldStoreMsgOffline(msgKey, &shouldStoreMsgOffline); if (shouldStoreMsgOffline) - keysOfMessagesToDownload->Add(msgKey); + keysOfMessagesToDownload->AppendElement(msgKey); } } return rv; @@ -2395,9 +2393,9 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(nsIImapProtocol* aProtocol PRBool folderSelected; rv = aSpec->GetFolderSelected(&folderSelected); NS_ENSURE_SUCCESS(rv, rv); - nsMsgKeyArray existingKeys; - nsMsgKeyArray keysToDelete; - nsMsgKeyArray keysToFetch; + nsTArray existingKeys; + nsTArray keysToDelete; + nsTArray keysToFetch; PRUint32 numNewUnread; nsCOMPtr dbFolderInfo; PRInt32 imapUIDValidity = 0; @@ -2408,10 +2406,10 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(nsIImapProtocol* aProtocol if (NS_SUCCEEDED(rv) && dbFolderInfo) dbFolderInfo->GetImapUidValidity(&imapUIDValidity); mDatabase->ListAllKeys(existingKeys); - PRInt32 keyCount = existingKeys.GetSize(); + PRInt32 keyCount = existingKeys.Length(); mDatabase->ListAllOfflineDeletes(&existingKeys); - if (keyCount < existingKeys.GetSize()) - existingKeys.QuickSort(); + if (keyCount < existingKeys.Length()) + existingKeys.Sort(); } PRInt32 folderValidity; aSpec->GetFolder_UIDVALIDITY(&folderValidity); @@ -2484,12 +2482,12 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(nsIImapProtocol* aProtocol dbFolderInfo->SetImapUidValidity(folderValidity); // delete all my msgs, the keys are bogus now // add every message in this folder - existingKeys.RemoveAll(); + existingKeys.Clear(); // keysToDelete.CopyArray(&existingKeys); if (flagState) { - nsMsgKeyArray no_existingKeys; + nsTArray no_existingKeys; FindKeysToAdd(no_existingKeys, keysToFetch, numNewUnread, flagState); } if (NS_FAILED(rv)) @@ -2497,7 +2495,7 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(nsIImapProtocol* aProtocol } else if (!flagState /*&& !NET_IsOffline() */) // if there are no messages on the server - keysToDelete.CopyArray(&existingKeys); + keysToDelete = existingKeys; else /* if ( !NET_IsOffline()) */ { FindKeysToDelete(existingKeys, keysToDelete, flagState); @@ -2507,12 +2505,12 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(nsIImapProtocol* aProtocol if (!(boxFlags & kJustExpunged)) FindKeysToAdd(existingKeys, keysToFetch, numNewUnread, flagState); } - if (keysToDelete.GetSize() && mDatabase) + if (!keysToDelete.IsEmpty() && mDatabase) { PRUint32 total; // It would be nice to notify RDF or whoever of a mass delete here. mDatabase->DeleteMessages(&keysToDelete, nsnull); - total = keysToDelete.GetSize(); + total = keysToDelete.Length(); } // If we are performing biff for this folder, tell the // stand-alone biff about the new high water mark @@ -2528,10 +2526,10 @@ NS_IMETHODIMP nsImapMailFolder::UpdateImapMailboxInfo(nsIImapProtocol* aProtocol SyncFlags(flagState); PRInt32 numUnreadFromServer; aSpec->GetNumUnseenMessages(&numUnreadFromServer); - if (mDatabase && mNumUnreadMessages + keysToFetch.GetSize() > numUnreadFromServer) + if (mDatabase && mNumUnreadMessages + keysToFetch.Length() > numUnreadFromServer) mDatabase->SyncCounts(); - if (keysToFetch.GetSize()) + if (!keysToFetch.IsEmpty()) PrepareToAddHeadersToMailDB(aProtocol, keysToFetch, aSpec); else { @@ -3174,10 +3172,10 @@ NS_IMETHODIMP nsImapMailFolder::ApplyFilterHit(nsIMsgFilter *filter, nsIMsgWindo mDatabase->SetStringProperty(msgKey, "junkscoreorigin", /* ### should this be plugin? */"plugin"); if (junkScore == 100 || !junkScore) // if score is 0 or 100, set up to store junk status on server. { - nsMsgKeyArray *keysToClassify = m_moveCoalescer->GetKeyBucket((junkScore == 100) ? 0 : 1); + nsTArray *keysToClassify = m_moveCoalescer->GetKeyBucket((junkScore == 100) ? 0 : 1); NS_ASSERTION(keysToClassify, "error getting key bucket"); if (keysToClassify) - keysToClassify->Add(msgKey); + keysToClassify->AppendElement(msgKey); if (junkScore == 100) msgIsNew = PR_FALSE; } @@ -3538,9 +3536,9 @@ nsresult nsImapMailFolder::MoveIncorporatedMessage(nsIMsgDBHdr *mailHdr, // folder - we used to store them in the MSG_FolderInfo and then when we'd finished // downloading headers, we'd iterate through all the folders looking for the ones // that needed messages moved into them - perhaps instead we could - // keep track of nsIMsgFolder, nsMsgKeyArray pairs here in the imap code. - // nsMsgKeyArray *idsToMoveFromInbox = msgFolder->GetImapIdsToMoveFromInbox(); - // idsToMoveFromInbox->Add(keyToFilter); + // keep track of nsIMsgFolder, nsTArray pairs here in the imap code. + // nsTArray *idsToMoveFromInbox = msgFolder->GetImapIdsToMoveFromInbox(); + // idsToMoveFromInbox->AppendElement(keyToFilter); if (imapDeleteIsMoveToTrash) { } @@ -3560,10 +3558,10 @@ nsresult nsImapMailFolder::MoveIncorporatedMessage(nsIMsgDBHdr *mailHdr, } // both of these algorithms assume that key arrays and flag states are sorted by increasing key. -void nsImapMailFolder::FindKeysToDelete(const nsMsgKeyArray &existingKeys, nsMsgKeyArray &keysToDelete, nsIImapFlagAndUidState *flagState) +void nsImapMailFolder::FindKeysToDelete(const nsTArray &existingKeys, nsTArray &keysToDelete, nsIImapFlagAndUidState *flagState) { PRBool showDeletedMessages = ShowDeletedMessages(); - PRUint32 total = existingKeys.GetSize(); + PRUint32 total = existingKeys.Length(); PRInt32 messageIndex; int onlineIndex=0; // current index into flagState @@ -3588,7 +3586,7 @@ void nsImapMailFolder::FindKeysToDelete(const nsMsgKeyArray &existingKeys, nsMsg if ((PRInt32) doomedKey <= 0 && doomedKey != nsMsgKey_None) continue; else - keysToDelete.Add(existingKeys[keyIndex]); + keysToDelete.AppendElement(existingKeys[keyIndex]); } flagState->GetUidOfMessage(onlineIndex, &uidOfMessage); @@ -3597,7 +3595,7 @@ void nsImapMailFolder::FindKeysToDelete(const nsMsgKeyArray &existingKeys, nsMsg } } -void nsImapMailFolder::FindKeysToAdd(const nsMsgKeyArray &existingKeys, nsMsgKeyArray &keysToFetch, PRUint32 &numNewUnread, nsIImapFlagAndUidState *flagState) +void nsImapMailFolder::FindKeysToAdd(const nsTArray &existingKeys, nsTArray &keysToFetch, PRUint32 &numNewUnread, nsIImapFlagAndUidState *flagState) { PRBool showDeletedMessages = ShowDeletedMessages(); int dbIndex=0; // current index into existingKeys @@ -3605,7 +3603,7 @@ void nsImapMailFolder::FindKeysToAdd(const nsMsgKeyArray &existingKeys, nsMsgKey PRInt32 messageIndex; numNewUnread = 0; - existTotal = numberOfKnownKeys = existingKeys.GetSize(); + existTotal = numberOfKnownKeys = existingKeys.Length(); flagState->GetNumberOfMessages(&messageIndex); for (PRInt32 flagIndex=0; flagIndex < messageIndex; flagIndex++) { @@ -3635,7 +3633,7 @@ void nsImapMailFolder::FindKeysToAdd(const nsMsgKeyArray &existingKeys, nsMsgKey continue; } } - keysToFetch.Add(uidOfMessage); + keysToFetch.AppendElement(uidOfMessage); if (! (flags & kImapMsgSeenFlag)) numNewUnread++; } @@ -3643,19 +3641,19 @@ void nsImapMailFolder::FindKeysToAdd(const nsMsgKeyArray &existingKeys, nsMsgKey } } -void nsImapMailFolder::PrepareToAddHeadersToMailDB(nsIImapProtocol* aProtocol, const nsMsgKeyArray &keysToFetch, +void nsImapMailFolder::PrepareToAddHeadersToMailDB(nsIImapProtocol* aProtocol, const nsTArray &keysToFetch, nsIMailboxSpec *boxSpec) { - PRUint32 *theKeys = (PRUint32 *) PR_Malloc( keysToFetch.GetSize() * sizeof(PRUint32) ); + PRUint32 *theKeys = (PRUint32 *) PR_Malloc( keysToFetch.Length() * sizeof(PRUint32) ); if (theKeys) { - PRUint32 total = keysToFetch.GetSize(); + PRUint32 total = keysToFetch.Length(); for (PRUint32 keyIndex=0; keyIndex < total; keyIndex++) theKeys[keyIndex] = keysToFetch[keyIndex]; // tell the imap thread which hdrs to download if (aProtocol) { - aProtocol->NotifyHdrsToDownload(theKeys, total /*keysToFetch.GetSize() */); + aProtocol->NotifyHdrsToDownload(theKeys, total /*keysToFetch.Length() */); // now, tell it we don't need any bodies. aProtocol->NotifyBodysToDownload(nsnull, 0); } @@ -3773,7 +3771,7 @@ nsImapMailFolder::SetupMsgWriteStream(nsIFile * aFile, PRBool addDummyEnvelope) NS_IMETHODIMP nsImapMailFolder::DownloadMessagesForOffline(nsISupportsArray *messages, nsIMsgWindow *window) { nsCAutoString messageIds; - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; nsresult rv = BuildIdsAndKeyArray(messages, messageIds, srcKeyArray); if (NS_FAILED(rv) || messageIds.IsEmpty()) return rv; @@ -3801,7 +3799,7 @@ NS_IMETHODIMP nsImapMailFolder::DownloadAllForOffline(nsIUrlListener *listener, if (!noSelect) { nsCAutoString messageIdsToDownload; - nsMsgKeyArray msgsToDownload; + nsTArray msgsToDownload; GetDatabase(msgWindow); m_downloadingFolderForOfflineUse = PR_TRUE; @@ -4110,7 +4108,7 @@ nsImapMailFolder::NotifyMessageDeleted(const char * onlineFolderName, PRBool del if (deleteAllMsgs) return NS_OK; - nsMsgKeyArray affectedMessages; + nsTArray affectedMessages; ParseUidString(msgIdString, affectedMessages); if (msgIdString && !ShowDeletedMessages()) @@ -4119,7 +4117,7 @@ nsImapMailFolder::NotifyMessageDeleted(const char * onlineFolderName, PRBool del NS_ENSURE_TRUE(mDatabase, NS_OK); if (!ShowDeletedMessages()) { - if (affectedMessages.GetSize() > 0) // perhaps Search deleted these messages + if (!affectedMessages.IsEmpty()) // perhaps Search deleted these messages mDatabase->DeleteMessages(&affectedMessages, nsnull); } else // && !imapDeleteIsMoveToTrash @@ -4172,10 +4170,10 @@ nsresult nsImapMailFolder::GetTrashFolder(nsIMsgFolder **pTrashFolder) // store MSG_FLAG_IMAP_DELETED in the specified mailhdr records -void nsImapMailFolder::SetIMAPDeletedFlag(nsIMsgDatabase *mailDB, const nsMsgKeyArray &msgids, PRBool markDeleted) +void nsImapMailFolder::SetIMAPDeletedFlag(nsIMsgDatabase *mailDB, const nsTArray &msgids, PRBool markDeleted) { nsresult markStatus = 0; - PRUint32 total = msgids.GetSize(); + PRUint32 total = msgids.Length(); for (PRUint32 msgIndex=0; !markStatus && (msgIndex < total); msgIndex++) markStatus = mailDB->MarkImapDeleted(msgids[msgIndex], markDeleted, nsnull); @@ -4348,7 +4346,7 @@ nsImapMailFolder::OnStopRunningUrl(nsIURI *aUrl, nsresult aExitCode) if (NS_SUCCEEDED(rv) && srcDB) { nsRefPtr msgTxn; - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; if (m_copyState->m_allowUndo) { rv = m_copyState->m_undoMsgTxn->QueryInterface(NS_GET_IID(nsImapMoveCopyMsgTxn), getter_AddRefs(msgTxn)); @@ -4425,7 +4423,7 @@ nsImapMailFolder::OnStopRunningUrl(nsIURI *aUrl, nsresult aExitCode) rv = GetMsgDatabase(nsnull, getter_AddRefs(db)); if (NS_SUCCEEDED(rv) && db) { - nsMsgKeyArray keyArray; + nsTArray keyArray; char *keyString; imapUrl->CreateListOfMessageIdsString(&keyString); if (keyString) @@ -4452,7 +4450,7 @@ nsImapMailFolder::OnStopRunningUrl(nsIURI *aUrl, nsresult aExitCode) rv = GetMsgDatabase(nsnull, getter_AddRefs(db)); if (NS_SUCCEEDED(rv) && db) { - nsMsgKeyArray keyArray; + nsTArray keyArray; char *keyString = nsnull; imapUrl->CreateListOfMessageIdsString(&keyString); if (keyString) @@ -4858,15 +4856,15 @@ nsImapMailFolder::HeaderFetchCompleted(nsIImapProtocol* aProtocol) if (m_downloadingFolderForOfflineUse) { - nsMsgKeyArray keysToDownload; + nsTArray keysToDownload; GetBodysToDownload(&keysToDownload); - if (keysToDownload.GetSize() > 0) + if (!keysToDownload.IsEmpty()) SetNotifyDownloadedLines(PR_TRUE); - aProtocol->NotifyBodysToDownload(keysToDownload.GetArray(), keysToDownload.GetSize()); + aProtocol->NotifyBodysToDownload(keysToDownload.Elements(), keysToDownload.Length()); } else - aProtocol->NotifyBodysToDownload(nsnull, 0/*keysToFetch.GetSize() */); + aProtocol->NotifyBodysToDownload(nsnull, 0/*keysToFetch.Length() */); nsCOMPtr runningUri; aProtocol->GetRunningUrl(getter_AddRefs(runningUri)); @@ -5782,7 +5780,7 @@ nsImapMailFolder::CopyMessagesWithStream(nsIMsgFolder* srcFolder, if (m_copyState->m_allowUndo) { nsCAutoString messageIds; - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; nsCOMPtr urlListener; rv = QueryInterface(NS_GET_IID(nsIUrlListener), getter_AddRefs(urlListener)); rv = BuildIdsAndKeyArray(messages, messageIds, srcKeyArray); @@ -6072,11 +6070,11 @@ nsresult nsImapMailFolder::CopyMessagesOffline(nsIMsgFolder* srcFolder, else sourceOp->AddMessageCopyOperation(folderURI.get()); // offline copy - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; nsCOMPtr urlListener; sourceOp->GetOperation(&opType); - srcKeyArray.Add(originalKey); + srcKeyArray.AppendElement(originalKey); rv = QueryInterface(NS_GET_IID(nsIUrlListener), getter_AddRefs(urlListener)); nsImapOfflineTxn *undoMsgTxn = new nsImapOfflineTxn(srcFolder, &srcKeyArray, this, isMove, opType, message, @@ -6141,8 +6139,8 @@ nsresult nsImapMailFolder::CopyMessagesOffline(nsIMsgFolder* srcFolder, { nsCOMPtr urlListener; QueryInterface(NS_GET_IID(nsIUrlListener), getter_AddRefs(urlListener)); - nsMsgKeyArray keyArray; - keyArray.Add(fakeBase + sourceKeyIndex); + nsTArray keyArray; + keyArray.AppendElement(fakeBase + sourceKeyIndex); nsImapOfflineTxn *undoMsgTxn = new nsImapOfflineTxn(this, &keyArray, this, isMove, nsIMsgOfflineImapOperation::kAddedHeader, newMailHdr, m_thread, urlListener); @@ -6159,14 +6157,14 @@ nsresult nsImapMailFolder::CopyMessagesOffline(nsIMsgFolder* srcFolder, mailHdr->GetMessageKey(&msgKey); if (isMove && successfulCopy) { - nsMsgKeyArray srcKeyArray; - srcKeyArray.Add(msgKey); + nsTArray srcKeyArray; + srcKeyArray.AppendElement(msgKey); nsCOMPtr urlListener; rv = QueryInterface(NS_GET_IID(nsIUrlListener), getter_AddRefs(urlListener)); nsOfflineImapOperationType opType = nsIMsgOfflineImapOperation::kDeletedMsg; if (!deleteToTrash) opType = nsIMsgOfflineImapOperation::kMsgMarkedDeleted; - srcKeyArray.Add(msgKey); + srcKeyArray.AppendElement(msgKey); nsImapOfflineTxn *undoMsgTxn = new nsImapOfflineTxn(srcFolder, &srcKeyArray, this, isMove, opType, mailHdr, m_thread, urlListener); @@ -6223,7 +6221,7 @@ nsImapMailFolder::CopyMessages(nsIMsgFolder* srcFolder, { nsresult rv; nsCAutoString messageIds; - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; nsCOMPtr urlListener; nsCOMPtr srcSupport; nsCOMPtr copySupport; @@ -7518,14 +7516,14 @@ nsImapMailFolder::PlaybackCoalescedOperations() { if (m_moveCoalescer) { - nsMsgKeyArray *junkKeysToClassify = m_moveCoalescer->GetKeyBucket(0); - if (junkKeysToClassify && junkKeysToClassify->GetSize() > 0) - StoreCustomKeywords(m_moveCoalescer->GetMsgWindow(), NS_LITERAL_CSTRING("Junk"), EmptyCString(), junkKeysToClassify->GetArray(), junkKeysToClassify->GetSize(), nsnull); - junkKeysToClassify->RemoveAll(); - nsMsgKeyArray *nonJunkKeysToClassify = m_moveCoalescer->GetKeyBucket(1); - if (nonJunkKeysToClassify && nonJunkKeysToClassify->GetSize() > 0) - StoreCustomKeywords(m_moveCoalescer->GetMsgWindow(), NS_LITERAL_CSTRING("NonJunk"), EmptyCString(), nonJunkKeysToClassify->GetArray(), nonJunkKeysToClassify->GetSize(), nsnull); - nonJunkKeysToClassify->RemoveAll(); + nsTArray *junkKeysToClassify = m_moveCoalescer->GetKeyBucket(0); + if (junkKeysToClassify && !junkKeysToClassify->IsEmpty()) + StoreCustomKeywords(m_moveCoalescer->GetMsgWindow(), NS_LITERAL_CSTRING("Junk"), EmptyCString(), junkKeysToClassify->Elements(), junkKeysToClassify->Length(), nsnull); + junkKeysToClassify->Clear(); + nsTArray *nonJunkKeysToClassify = m_moveCoalescer->GetKeyBucket(1); + if (nonJunkKeysToClassify && !nonJunkKeysToClassify->IsEmpty()) + StoreCustomKeywords(m_moveCoalescer->GetMsgWindow(), NS_LITERAL_CSTRING("NonJunk"), EmptyCString(), nonJunkKeysToClassify->Elements(), nonJunkKeysToClassify->Length(), nsnull); + nonJunkKeysToClassify->Clear(); return m_moveCoalescer->PlaybackMoves(ShowPreviewText()); } return NS_OK; // must not be any coalesced operations @@ -7540,11 +7538,11 @@ nsImapMailFolder::SetJunkScoreForMessages(nsISupportsArray *aMessages, const nsA if (NS_SUCCEEDED(rv)) { nsCAutoString messageIds; - nsMsgKeyArray keys; + nsTArray keys; nsresult rv = BuildIdsAndKeyArray(aMessages, messageIds, keys); NS_ENSURE_SUCCESS(rv, rv); - StoreCustomKeywords(nsnull, aJunkScore.Equals("0") ? NS_LITERAL_CSTRING("NonJunk") : NS_LITERAL_CSTRING("Junk"), EmptyCString(), keys.GetArray(), - keys.GetSize(), nsnull); + StoreCustomKeywords(nsnull, aJunkScore.Equals("0") ? NS_LITERAL_CSTRING("NonJunk") : NS_LITERAL_CSTRING("Junk"), EmptyCString(), keys.Elements(), + keys.Length(), nsnull); if (mDatabase) mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); } @@ -7572,10 +7570,10 @@ nsImapMailFolder::OnMessageClassified(const char * aMsgURI, nsMsgJunkStatus aCla GetMoveCoalescer(); if (m_moveCoalescer) { - nsMsgKeyArray *keysToClassify = m_moveCoalescer->GetKeyBucket((aClassification == nsIJunkMailPlugin::JUNK) ? 0 : 1); + nsTArray *keysToClassify = m_moveCoalescer->GetKeyBucket((aClassification == nsIJunkMailPlugin::JUNK) ? 0 : 1); NS_ASSERTION(keysToClassify, "error getting key bucket"); if (keysToClassify) - keysToClassify->Add(msgKey); + keysToClassify->AppendElement(msgKey); } if (aClassification == nsIJunkMailPlugin::JUNK) { @@ -7718,7 +7716,7 @@ NS_IMETHODIMP nsImapMailFolder::FetchMsgPreviewText(nsMsgKey *aKeysToFetch, PRUi NS_ENSURE_ARG_POINTER(aKeysToFetch); NS_ENSURE_ARG_POINTER(aAsyncResults); - nsMsgKeyArray keysToFetchFromServer; + nsTArray keysToFetchFromServer; *aAsyncResults = PR_FALSE; nsresult rv = NS_OK; @@ -7791,14 +7789,14 @@ NS_IMETHODIMP nsImapMailFolder::FetchMsgPreviewText(nsMsgKey *aKeysToFetch, PRUi rv = GetMsgPreviewTextFromStream(msgHdr, inputStream); } else if (!aLocalOnly) - keysToFetchFromServer.Add(msgKey); + keysToFetchFromServer.AppendElement(msgKey); } } - if (keysToFetchFromServer.GetSize() > 0) + if (!keysToFetchFromServer.IsEmpty()) { - PRUint32 msgCount = keysToFetchFromServer.GetSize(); + PRUint32 msgCount = keysToFetchFromServer.Length(); nsCAutoString messageIds; - AllocateImapUidString(keysToFetchFromServer.GetArray(), msgCount, + AllocateImapUidString(keysToFetchFromServer.Elements(), msgCount, nsnull, messageIds); rv = imapService->GetBodyStart(m_thread, this, aUrlListener, messageIds, 2048, nsnull); @@ -7813,10 +7811,10 @@ NS_IMETHODIMP nsImapMailFolder::AddKeywordsToMessages(nsISupportsArray *aMessage if (NS_SUCCEEDED(rv)) { nsCAutoString messageIds; - nsMsgKeyArray keys; + nsTArray keys; rv = BuildIdsAndKeyArray(aMessages, messageIds, keys); NS_ENSURE_SUCCESS(rv, rv); - rv = StoreCustomKeywords(nsnull, aKeywords, EmptyCString(), keys.GetArray(), keys.GetSize(), nsnull); + rv = StoreCustomKeywords(nsnull, aKeywords, EmptyCString(), keys.Elements(), keys.Length(), nsnull); if (mDatabase) mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); } @@ -7829,10 +7827,10 @@ NS_IMETHODIMP nsImapMailFolder::RemoveKeywordsFromMessages(nsISupportsArray *aMe if (NS_SUCCEEDED(rv)) { nsCAutoString messageIds; - nsMsgKeyArray keys; + nsTArray keys; nsresult rv = BuildIdsAndKeyArray(aMessages, messageIds, keys); NS_ENSURE_SUCCESS(rv, rv); - rv = StoreCustomKeywords(nsnull, EmptyCString(), aKeywords, keys.GetArray(), keys.GetSize(), nsnull); + rv = StoreCustomKeywords(nsnull, EmptyCString(), aKeywords, keys.Elements(), keys.Length(), nsnull); if (mDatabase) mDatabase->Commit(nsMsgDBCommitType::kLargeCommit); } diff --git a/mailnews/imap/src/nsImapMailFolder.h b/mailnews/imap/src/nsImapMailFolder.h index a8fa7452cc8..46fb6fe631c 100644 --- a/mailnews/imap/src/nsImapMailFolder.h +++ b/mailnews/imap/src/nsImapMailFolder.h @@ -331,12 +331,12 @@ public: protected: // Helper methods - void FindKeysToAdd(const nsMsgKeyArray &existingKeys, nsMsgKeyArray + void FindKeysToAdd(const nsTArray &existingKeys, nsTArray &keysToFetch, PRUint32 &numNewUnread, nsIImapFlagAndUidState *flagState); - void FindKeysToDelete(const nsMsgKeyArray &existingKeys, nsMsgKeyArray + void FindKeysToDelete(const nsTArray &existingKeys, nsTArray &keysToFetch, nsIImapFlagAndUidState *flagState); void PrepareToAddHeadersToMailDB(nsIImapProtocol* aProtocol, const - nsMsgKeyArray &keysToFetch, + nsTArray &keysToFetch, nsIMailboxSpec *boxSpec); void TweakHeaderFlags(nsIImapProtocol* aProtocol, nsIMsgDBHdr *tweakMe); @@ -350,10 +350,10 @@ protected: void EndOfflineDownload(); - nsresult MarkMessagesImapDeleted(nsMsgKeyArray *keyArray, PRBool deleted, nsIMsgDatabase *db); + nsresult MarkMessagesImapDeleted(nsTArray *keyArray, PRBool deleted, nsIMsgDatabase *db); void UpdatePendingCounts(); - void SetIMAPDeletedFlag(nsIMsgDatabase *mailDB, const nsMsgKeyArray &msgids, PRBool markDeleted); + void SetIMAPDeletedFlag(nsIMsgDatabase *mailDB, const nsTArray &msgids, PRBool markDeleted); virtual PRBool ShowDeletedMessages(); virtual PRBool DeleteIsMoveToTrash(); nsresult GetFolder(const nsACString& name, nsIMsgFolder **pFolder); @@ -375,7 +375,7 @@ protected: nsMsgIMAPFolderACL * GetFolderACL(); nsresult CreateACLRightsStringForFolder(nsAString& rightsString); - nsresult GetBodysToDownload(nsMsgKeyArray *keysOfMessagesToDownload); + nsresult GetBodysToDownload(nsTArray *keysOfMessagesToDownload); // Uber message copy service nsresult CopyMessagesWithStream(nsIMsgFolder* srcFolder, nsISupportsArray* messages, @@ -395,7 +395,7 @@ protected: nsIMsgWindow *msgWindow, PRBool allowUndo); nsresult OnCopyCompleted(nsISupports *srcSupport, nsresult exitCode); - nsresult BuildIdsAndKeyArray(nsISupportsArray* messages, nsCString& msgIds, nsMsgKeyArray& keyArray); + nsresult BuildIdsAndKeyArray(nsISupportsArray* messages, nsCString& msgIds, nsTArray& keyArray); nsresult GetMoveCoalescer(); nsresult PlaybackCoalescedOperations(); virtual nsresult CreateBaseMessageURI(const nsACString& aURI); diff --git a/mailnews/imap/src/nsImapOfflineSync.cpp b/mailnews/imap/src/nsImapOfflineSync.cpp index a395961ed31..f8100d7860a 100644 --- a/mailnews/imap/src/nsImapOfflineSync.cpp +++ b/mailnews/imap/src/nsImapOfflineSync.cpp @@ -235,7 +235,7 @@ void nsImapOfflineSync::AdvanceToFirstIMAPFolder() void nsImapOfflineSync::ProcessFlagOperation(nsIMsgOfflineImapOperation *op) { nsCOMPtr currentOp = op; - nsMsgKeyArray matchingFlagKeys; + nsTArray matchingFlagKeys; PRUint32 currentKeyIndex = m_KeyIndex; imapMessageFlagsType matchingFlags; @@ -249,11 +249,11 @@ void nsImapOfflineSync::ProcessFlagOperation(nsIMsgOfflineImapOperation *op) { nsMsgKey curKey; currentOp->GetMessageKey(&curKey); - matchingFlagKeys.Add(curKey); + matchingFlagKeys.AppendElement(curKey); currentOp->ClearOperation(nsIMsgOfflineImapOperation::kFlagsChanged); } currentOp = nsnull; - if (++currentKeyIndex < m_CurrentKeys.GetSize()) + if (++currentKeyIndex < m_CurrentKeys.Length()) m_currentDB->GetOfflineOpForKey(m_CurrentKeys[currentKeyIndex], PR_FALSE, getter_AddRefs(currentOp)); if (currentOp) @@ -269,10 +269,10 @@ void nsImapOfflineSync::ProcessFlagOperation(nsIMsgOfflineImapOperation *op) && (newFlags == matchingFlags); } while (currentOp); - if (matchingFlagKeys.GetSize() > 0) + if (!matchingFlagKeys.IsEmpty()) { nsCAutoString uids; - nsImapMailFolder::AllocateUidStringFromKeys(matchingFlagKeys.GetArray(), matchingFlagKeys.GetSize(), uids); + nsImapMailFolder::AllocateUidStringFromKeys(matchingFlagKeys.Elements(), matchingFlagKeys.Length(), uids); PRUint32 curFolderFlags; m_currentFolder->GetFlags(&curFolderFlags); @@ -300,7 +300,7 @@ void nsImapOfflineSync::ProcessFlagOperation(nsIMsgOfflineImapOperation *op) void nsImapOfflineSync::ProcessKeywordOperation(nsIMsgOfflineImapOperation *op) { nsCOMPtr currentOp = op; - nsMsgKeyArray matchingKeywordKeys; + nsTArray matchingKeywordKeys; PRUint32 currentKeyIndex = m_KeyIndex; nsCAutoString keywords; @@ -315,11 +315,11 @@ void nsImapOfflineSync::ProcessKeywordOperation(nsIMsgOfflineImapOperation *op) { nsMsgKey curKey; currentOp->GetMessageKey(&curKey); - matchingKeywordKeys.Add(curKey); + matchingKeywordKeys.AppendElement(curKey); currentOp->ClearOperation(mCurrentPlaybackOpType); } currentOp = nsnull; - if (++currentKeyIndex < m_CurrentKeys.GetSize()) + if (++currentKeyIndex < m_CurrentKeys.Length()) m_currentDB->GetOfflineOpForKey(m_CurrentKeys[currentKeyIndex], PR_FALSE, getter_AddRefs(currentOp)); if (currentOp) @@ -336,7 +336,7 @@ void nsImapOfflineSync::ProcessKeywordOperation(nsIMsgOfflineImapOperation *op) } } while (currentOp); - if (matchingKeywordKeys.GetSize() > 0) + if (!matchingKeywordKeys.IsEmpty()) { PRUint32 curFolderFlags; m_currentFolder->GetFlags(&curFolderFlags); @@ -351,8 +351,8 @@ void nsImapOfflineSync::ProcessKeywordOperation(nsIMsgOfflineImapOperation *op) rv = imapFolder->StoreCustomKeywords(m_window, (mCurrentPlaybackOpType == nsIMsgOfflineImapOperation::kAddKeywords) ? keywords : EmptyCString(), (mCurrentPlaybackOpType == nsIMsgOfflineImapOperation::kRemoveKeywords) ? keywords : EmptyCString(), - matchingKeywordKeys.GetArray(), - matchingKeywordKeys.GetSize(), getter_AddRefs(uriToStoreCustomKeywords)); + matchingKeywordKeys.Elements(), + matchingKeywordKeys.Length(), getter_AddRefs(uriToStoreCustomKeywords)); if (NS_SUCCEEDED(rv) && uriToStoreCustomKeywords) { nsCOMPtr mailnewsUrl = do_QueryInterface(uriToStoreCustomKeywords); @@ -476,7 +476,7 @@ nsImapOfflineSync::ProcessAppendMsgOperation(nsIMsgOfflineImapOperation *current void nsImapOfflineSync::ProcessMoveOperation(nsIMsgOfflineImapOperation *op) { - nsMsgKeyArray matchingFlagKeys ; + nsTArray matchingFlagKeys; PRUint32 currentKeyIndex = m_KeyIndex; nsCString moveDestination; op->GetDestinationFolderURI(getter_Copies(moveDestination)); @@ -488,12 +488,12 @@ void nsImapOfflineSync::ProcessMoveOperation(nsIMsgOfflineImapOperation *op) { nsMsgKey curKey; currentOp->GetMessageKey(&curKey); - matchingFlagKeys.Add(curKey); + matchingFlagKeys.AppendElement(curKey); currentOp->ClearOperation(nsIMsgOfflineImapOperation::kMsgMoved); } currentOp = nsnull; - if (++currentKeyIndex < m_CurrentKeys.GetSize()) + if (++currentKeyIndex < m_CurrentKeys.Length()) { nsCString nextDestination; nsresult rv = m_currentDB->GetOfflineOpForKey(m_CurrentKeys[currentKeyIndex], PR_FALSE, getter_AddRefs(currentOp)); @@ -526,7 +526,7 @@ void nsImapOfflineSync::ProcessMoveOperation(nsIMsgOfflineImapOperation *op) nsCOMPtr imapFolder = do_QueryInterface(m_currentFolder); if (imapFolder && DestFolderOnSameServer(destFolder)) { - rv = imapFolder->ReplayOfflineMoveCopy(matchingFlagKeys.GetArray(), matchingFlagKeys.GetSize(), PR_TRUE, destFolder, + rv = imapFolder->ReplayOfflineMoveCopy(matchingFlagKeys.Elements(), matchingFlagKeys.Length(), PR_TRUE, destFolder, this, m_window); } else @@ -535,7 +535,7 @@ void nsImapOfflineSync::ProcessMoveOperation(nsIMsgOfflineImapOperation *op) if (messages && NS_SUCCEEDED(rv)) { NS_NewISupportsArray(getter_AddRefs(messages)); - for (PRUint32 keyIndex = 0; keyIndex < matchingFlagKeys.GetSize(); keyIndex++) + for (PRUint32 keyIndex = 0; keyIndex < matchingFlagKeys.Length(); keyIndex++) { nsCOMPtr mailHdr = nsnull; rv = m_currentFolder->GetMessageHeader(matchingFlagKeys.ElementAt(keyIndex), getter_AddRefs(mailHdr)); @@ -590,7 +590,7 @@ PRBool nsImapOfflineSync::DestFolderOnSameServer(nsIMsgFolder *destFolder) void nsImapOfflineSync::ProcessCopyOperation(nsIMsgOfflineImapOperation *currentOp) { - nsMsgKeyArray matchingFlagKeys; + nsTArray matchingFlagKeys; PRUint32 currentKeyIndex = m_KeyIndex; nsCString copyDestination; currentOp->GetCopyDestination(0, getter_Copies(copyDestination)); @@ -601,12 +601,12 @@ void nsImapOfflineSync::ProcessCopyOperation(nsIMsgOfflineImapOperation *current { nsMsgKey curKey; currentOp->GetMessageKey(&curKey); - matchingFlagKeys.Add(curKey); + matchingFlagKeys.AppendElement(curKey); currentOp->ClearOperation(nsIMsgOfflineImapOperation::kMsgCopy); } currentOp = nsnull; - if (++currentKeyIndex < m_CurrentKeys.GetSize()) + if (++currentKeyIndex < m_CurrentKeys.Length()) { nsCString nextDestination; nsresult rv = m_currentDB->GetOfflineOpForKey(m_CurrentKeys[currentKeyIndex], PR_FALSE, ¤tOp); @@ -641,7 +641,7 @@ void nsImapOfflineSync::ProcessCopyOperation(nsIMsgOfflineImapOperation *current nsCOMPtr imapFolder = do_QueryInterface(m_currentFolder); if (imapFolder && DestFolderOnSameServer(destFolder)) { - rv = imapFolder->ReplayOfflineMoveCopy(matchingFlagKeys.GetArray(), matchingFlagKeys.GetSize(), PR_FALSE, destFolder, + rv = imapFolder->ReplayOfflineMoveCopy(matchingFlagKeys.Elements(), matchingFlagKeys.Length(), PR_FALSE, destFolder, this, m_window); } else @@ -650,7 +650,7 @@ void nsImapOfflineSync::ProcessCopyOperation(nsIMsgOfflineImapOperation *current if (messages && NS_SUCCEEDED(rv)) { NS_NewISupportsArray(getter_AddRefs(messages)); - for (PRUint32 keyIndex = 0; keyIndex < matchingFlagKeys.GetSize(); keyIndex++) + for (PRUint32 keyIndex = 0; keyIndex < matchingFlagKeys.Length(); keyIndex++) { nsCOMPtr mailHdr = nsnull; rv = m_currentFolder->GetMessageHeader(matchingFlagKeys.ElementAt(keyIndex), getter_AddRefs(mailHdr)); @@ -777,9 +777,9 @@ nsresult nsImapOfflineSync::ProcessNextOperation() if (m_currentDB) { - m_CurrentKeys.RemoveAll(); + m_CurrentKeys.Clear(); m_KeyIndex = 0; - if ((m_currentDB->ListAllOfflineOpIds(&m_CurrentKeys) != 0) || !m_CurrentKeys.GetSize()) + if ((m_currentDB->ListAllOfflineOpIds(&m_CurrentKeys) != 0) || m_CurrentKeys.IsEmpty()) { m_currentDB = nsnull; folderInfo = nsnull; // can't hold onto folderInfo longer than db @@ -789,7 +789,7 @@ nsresult nsImapOfflineSync::ProcessNextOperation() { // trash any ghost msgs PRBool deletedGhostMsgs = PR_FALSE; - for (PRUint32 fakeIndex=0; fakeIndex < m_CurrentKeys.GetSize(); fakeIndex++) + for (PRUint32 fakeIndex=0; fakeIndex < m_CurrentKeys.Length(); fakeIndex++) { nsCOMPtr currentOp; m_currentDB->GetOfflineOpForKey(m_CurrentKeys[fakeIndex], PR_FALSE, getter_AddRefs(currentOp)); @@ -814,8 +814,8 @@ nsresult nsImapOfflineSync::ProcessNextOperation() if (deletedGhostMsgs) m_currentFolder->SummaryChanged(); - m_CurrentKeys.RemoveAll(); - if ( (m_currentDB->ListAllOfflineOpIds(&m_CurrentKeys) != 0) || !m_CurrentKeys.GetSize() ) + m_CurrentKeys.Clear(); + if ( (m_currentDB->ListAllOfflineOpIds(&m_CurrentKeys) != 0) || m_CurrentKeys.IsEmpty() ) { m_currentDB = nsnull; if (deletedGhostMsgs) @@ -860,7 +860,7 @@ nsresult nsImapOfflineSync::ProcessNextOperation() if (!folderInfo) m_currentDB->GetDBFolderInfo(getter_AddRefs(folderInfo)); // user canceled the lite select! if GetCurrentUIDValidity() == 0 - if (folderInfo && (m_KeyIndex < m_CurrentKeys.GetSize()) && (m_pseudoOffline || (GetCurrentUIDValidity() != 0) || !(folderFlags & MSG_FOLDER_FLAG_IMAPBOX)) ) + if (folderInfo && (m_KeyIndex < m_CurrentKeys.Length()) && (m_pseudoOffline || (GetCurrentUIDValidity() != 0) || !(folderFlags & MSG_FOLDER_FLAG_IMAPBOX)) ) { PRInt32 curFolderUidValidity; folderInfo->GetImapUidValidity(&curFolderUidValidity); @@ -881,7 +881,7 @@ nsresult nsImapOfflineSync::ProcessNextOperation() { currentOp = nsnull; ++m_KeyIndex; - if (m_KeyIndex < m_CurrentKeys.GetSize()) + if (m_KeyIndex < m_CurrentKeys.Length()) m_currentDB->GetOfflineOpForKey(m_CurrentKeys[m_KeyIndex], PR_FALSE, getter_AddRefs(currentOp)); if (currentOp) currentOp->GetOperation(&opType); @@ -1059,7 +1059,7 @@ void nsImapOfflineSync::DeleteAllOfflineOpsForCurrentDB() m_currentDB->Commit(nsMsgDBCommitType::kLargeCommit); currentOp = nsnull; - if (++m_KeyIndex < m_CurrentKeys.GetSize()) + if (++m_KeyIndex < m_CurrentKeys.Length()) m_currentDB->GetOfflineOpForKey(m_CurrentKeys[m_KeyIndex], PR_FALSE, getter_AddRefs(currentOp)); } // turn off MSG_FOLDER_FLAG_OFFLINEEVENTS diff --git a/mailnews/imap/src/nsImapOfflineSync.h b/mailnews/imap/src/nsImapOfflineSync.h index f0e1c31469c..f917f270040 100644 --- a/mailnews/imap/src/nsImapOfflineSync.h +++ b/mailnews/imap/src/nsImapOfflineSync.h @@ -88,7 +88,7 @@ protected: nsCOMPtr m_serverEnumerator; nsCOMPtr m_curTempFile; - nsMsgKeyArray m_CurrentKeys; + nsTArray m_CurrentKeys; PRUint32 m_KeyIndex; nsCOMPtr m_currentDB; nsCOMPtr m_listener; diff --git a/mailnews/imap/src/nsImapProtocol.cpp b/mailnews/imap/src/nsImapProtocol.cpp index 9e99e29a28e..48207b9220e 100644 --- a/mailnews/imap/src/nsImapProtocol.cpp +++ b/mailnews/imap/src/nsImapProtocol.cpp @@ -4731,11 +4731,11 @@ nsImapProtocol::Store(const nsCString &messageList, const char * messageData, // turn messageList back into key array and then back into a message id list, // but use the flag state to handle ranges correctly. nsCString messageIdList; - nsMsgKeyArray msgKeys; + nsTArray msgKeys; if (idsAreUid) ParseUidString(messageList.get(), msgKeys); - PRInt32 msgCountLeft = msgKeys.GetSize(); + PRInt32 msgCountLeft = msgKeys.Length(); PRUint32 msgsHandled = 0; do { @@ -4743,7 +4743,7 @@ nsImapProtocol::Store(const nsCString &messageList, const char * messageData, PRUint32 msgsToHandle = msgCountLeft; if (idsAreUid) - AllocateImapUidString(msgKeys.GetArray() + msgsHandled, msgsToHandle, m_flagState, idString); // 20 * 200 + AllocateImapUidString(msgKeys.Elements() + msgsHandled, msgsToHandle, m_flagState, idString); // 20 * 200 else idString.Assign(messageList); @@ -7134,11 +7134,11 @@ void nsImapProtocol::Copy(const char * messageList, // turn messageList back into key array and then back into a message id list, // but use the flag state to handle ranges correctly. nsCString messageIdList; - nsMsgKeyArray msgKeys; + nsTArray msgKeys; if (idsAreUid) ParseUidString(messageList, msgKeys); - PRInt32 msgCountLeft = msgKeys.GetSize(); + PRInt32 msgCountLeft = msgKeys.Length(); PRUint32 msgsHandled = 0; const char *formatString; formatString = (idsAreUid) @@ -7151,7 +7151,7 @@ void nsImapProtocol::Copy(const char * messageList, PRUint32 msgsToHandle = msgCountLeft; if (idsAreUid) - AllocateImapUidString(msgKeys.GetArray() + msgsHandled, msgsToHandle, m_flagState, idString); + AllocateImapUidString(msgKeys.Elements() + msgsHandled, msgsToHandle, m_flagState, idString); else idString.Assign(messageList); diff --git a/mailnews/imap/src/nsImapServerResponseParser.h b/mailnews/imap/src/nsImapServerResponseParser.h index 78c92549ef7..9ab447e710a 100644 --- a/mailnews/imap/src/nsImapServerResponseParser.h +++ b/mailnews/imap/src/nsImapServerResponseParser.h @@ -42,7 +42,8 @@ #include "nsIMAPHostSessionList.h" #include "nsImapSearchResults.h" #include "nsString.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsImapUtils.h" class nsIMAPNamespace; @@ -288,7 +289,7 @@ private: nsImapProtocol &fServerConnection; nsIImapHostSessionList *fHostSessionList; - nsMsgKeyArray fCopyResponseKeyArray; + nsTArray fCopyResponseKeyArray; }; #endif diff --git a/mailnews/imap/src/nsImapService.cpp b/mailnews/imap/src/nsImapService.cpp index 20c3b1485ca..93d71c0f747 100644 --- a/mailnews/imap/src/nsImapService.cpp +++ b/mailnews/imap/src/nsImapService.cpp @@ -769,7 +769,7 @@ NS_IMETHODIMP nsImapService::CopyMessage(const char *aSrcMailboxURI, return rv; } -NS_IMETHODIMP nsImapService::CopyMessages(nsMsgKeyArray &keys, +NS_IMETHODIMP nsImapService::CopyMessages(nsTArray &keys, nsIMsgFolder *srcFolder, nsIStreamListener *aMailboxCopy, PRBool moveMessage, @@ -798,8 +798,8 @@ NS_IMETHODIMP nsImapService::CopyMessages(nsMsgKeyArray &keys, srcFolder->GenerateMessageURI(keys[0], uri); nsCString messageIds; - PRUint32 numKeys = keys.GetSize(); - AllocateImapUidString(keys.GetArray(), numKeys, nsnull, messageIds); + PRUint32 numKeys = keys.Length(); + AllocateImapUidString(keys.Elements(), numKeys, nsnull, messageIds); nsCOMPtr imapUrl; nsCAutoString urlSpec; PRUnichar hierarchySeparator = GetHierarchyDelimiter(folder); diff --git a/mailnews/imap/src/nsImapUndoTxn.cpp b/mailnews/imap/src/nsImapUndoTxn.cpp index 3d69d04a2fe..98e05e14da8 100644 --- a/mailnews/imap/src/nsImapUndoTxn.cpp +++ b/mailnews/imap/src/nsImapUndoTxn.cpp @@ -51,7 +51,7 @@ nsImapMoveCopyMsgTxn::nsImapMoveCopyMsgTxn() : } nsresult -nsImapMoveCopyMsgTxn::Init(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, +nsImapMoveCopyMsgTxn::Init(nsIMsgFolder* srcFolder, nsTArray* srcKeyArray, const char* srcMsgIdString, nsIMsgFolder* dstFolder, PRBool idsAreUids, PRBool isMove, nsIEventTarget* eventTarget, nsIUrlListener* urlListener) @@ -66,8 +66,8 @@ nsImapMoveCopyMsgTxn::Init(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, m_eventTarget = eventTarget; if (urlListener) m_urlListener = do_QueryInterface(urlListener, &rv); - m_srcKeyArray.CopyArray(srcKeyArray); - m_dupKeyArray.CopyArray(srcKeyArray); + m_srcKeyArray = *srcKeyArray; + m_dupKeyArray = *srcKeyArray; nsCString uri; rv = srcFolder->GetURI(uri); nsCString protocolType(uri); @@ -76,7 +76,7 @@ nsImapMoveCopyMsgTxn::Init(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, if (protocolType.LowerCaseEqualsLiteral("mailbox")) { m_srcIsPop3 = PR_TRUE; - PRUint32 i, count = m_srcKeyArray.GetSize(); + PRUint32 i, count = m_srcKeyArray.Length(); nsCOMPtr srcDB; rv = srcFolder->GetMsgDatabase(nsnull, getter_AddRefs(srcDB)); if (NS_FAILED(rv)) return rv; @@ -177,8 +177,8 @@ nsImapMoveCopyMsgTxn::UndoTransaction(void) // protect against a bogus undo txn without any source keys // see bug #179856 for details - NS_ASSERTION(m_srcKeyArray.GetSize(), "no source keys"); - if (!m_srcKeyArray.GetSize()) + NS_ASSERTION(!m_srcKeyArray.IsEmpty(), "no source keys"); + if (m_srcKeyArray.IsEmpty()) return NS_ERROR_UNEXPECTED; if (NS_SUCCEEDED(rv) && deleteModel == nsMsgImapDeleteModels::IMAPDelete) @@ -259,8 +259,8 @@ nsImapMoveCopyMsgTxn::RedoTransaction(void) // protect against a bogus undo txn without any source keys // see bug #179856 for details - NS_ASSERTION(m_srcKeyArray.GetSize(), "no source keys"); - if (!m_srcKeyArray.GetSize()) + NS_ASSERTION(!m_srcKeyArray.IsEmpty(), "no source keys"); + if (m_srcKeyArray.IsEmpty()) return NS_ERROR_UNEXPECTED; if (NS_SUCCEEDED(rv) && deleteModel == nsMsgImapDeleteModels::IMAPDelete) @@ -337,9 +337,9 @@ nsImapMoveCopyMsgTxn::SetCopyResponseUid(const char* aMsgIdString) } nsresult -nsImapMoveCopyMsgTxn::GetSrcKeyArray(nsMsgKeyArray& srcKeyArray) +nsImapMoveCopyMsgTxn::GetSrcKeyArray(nsTArray& srcKeyArray) { - srcKeyArray.CopyArray(&m_srcKeyArray); + srcKeyArray = m_srcKeyArray; return NS_OK; } @@ -372,7 +372,7 @@ nsImapMoveCopyMsgTxn::UndoMailboxDelete() rv = dstFolder->GetMsgDatabase(nsnull, getter_AddRefs(dstDB)); if (NS_FAILED(rv)) return rv; - PRUint32 count = m_srcKeyArray.GetSize(); + PRUint32 count = m_srcKeyArray.Length(); PRUint32 i; nsCOMPtr oldHdr; nsCOMPtr newHdr; @@ -441,7 +441,7 @@ nsresult nsImapMoveCopyMsgTxn::GetImapDeleteModel(nsIMsgFolder *aFolder, nsMsgIm return rv; } -nsImapOfflineTxn::nsImapOfflineTxn(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, +nsImapOfflineTxn::nsImapOfflineTxn(nsIMsgFolder* srcFolder, nsTArray* srcKeyArray, nsIMsgFolder* dstFolder, PRBool isMove, nsOfflineImapOperationType opType, nsIMsgDBHdr *srcHdr, nsIEventTarget* eventTarget, nsIUrlListener* urlListener) diff --git a/mailnews/imap/src/nsImapUndoTxn.h b/mailnews/imap/src/nsImapUndoTxn.h index dee60956946..3eb00e8bb99 100644 --- a/mailnews/imap/src/nsImapUndoTxn.h +++ b/mailnews/imap/src/nsImapUndoTxn.h @@ -45,7 +45,7 @@ #include "nsIUrlListener.h" #include "nsIEventTarget.h" #include "nsMsgTxn.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" #include "nsTArray.h" #include "nsIMsgOfflineImapOperation.h" #include "nsCOMPtr.h" @@ -62,7 +62,7 @@ public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMAPMOVECOPYMSGTXN_IID) nsImapMoveCopyMsgTxn(); - nsImapMoveCopyMsgTxn(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, + nsImapMoveCopyMsgTxn(nsIMsgFolder* srcFolder, nsTArray* srcKeyArray, const char* srcMsgIdString, nsIMsgFolder* dstFolder, PRBool idsAreUids, PRBool isMove, nsIEventTarget *eventTarget, @@ -76,11 +76,11 @@ public: // helper nsresult SetCopyResponseUid(const char *msgIdString); - nsresult GetSrcKeyArray(nsMsgKeyArray& srcKeyArray); + nsresult GetSrcKeyArray(nsTArray& srcKeyArray); nsresult AddDstKey(nsMsgKey aKey); nsresult UndoMailboxDelete(); nsresult RedoMailboxDelete(); - nsresult Init(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, + nsresult Init(nsIMsgFolder* srcFolder, nsTArray* srcKeyArray, const char* srcMsgIdString, nsIMsgFolder* dstFolder, PRBool idsAreUids, PRBool isMove, nsIEventTarget *eventTarget, @@ -90,8 +90,8 @@ protected: nsWeakPtr m_srcFolder; nsCOMPtr m_srcHdrs; - nsMsgKeyArray m_dupKeyArray; - nsMsgKeyArray m_srcKeyArray; + nsTArray m_dupKeyArray; + nsTArray m_srcKeyArray; nsCString m_srcMsgIdString; nsWeakPtr m_dstFolder; nsCString m_dstMsgIdString; @@ -110,7 +110,7 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsImapMoveCopyMsgTxn, NS_IMAPMOVECOPYMSGTXN_IID) class nsImapOfflineTxn : public nsImapMoveCopyMsgTxn { public: - nsImapOfflineTxn(nsIMsgFolder* srcFolder, nsMsgKeyArray* srcKeyArray, + nsImapOfflineTxn(nsIMsgFolder* srcFolder, nsTArray* srcKeyArray, nsIMsgFolder* dstFolder, PRBool isMove, nsOfflineImapOperationType opType, diff --git a/mailnews/imap/src/nsImapUtils.cpp b/mailnews/imap/src/nsImapUtils.cpp index 0413671996f..574f96785fc 100644 --- a/mailnews/imap/src/nsImapUtils.cpp +++ b/mailnews/imap/src/nsImapUtils.cpp @@ -423,7 +423,7 @@ void AllocateImapUidString(PRUint32 *msgUids, PRUint32 &msgCount, } } -void ParseUidString(const char *uidString, nsMsgKeyArray &keys) +void ParseUidString(const char *uidString, nsTArray &keys) { // This is in the form ,, or : char curChar = *uidString; @@ -444,9 +444,9 @@ void ParseUidString(const char *uidString, nsMsgKeyArray &keys) if (isRange) { while (saveStartToken < curToken) - keys.Add(saveStartToken++); + keys.AppendElement(saveStartToken++); } - keys.Add(curToken); + keys.AppendElement(curToken); isRange = (curChar == ':'); if (isRange) saveStartToken = curToken + 1; diff --git a/mailnews/imap/src/nsImapUtils.h b/mailnews/imap/src/nsImapUtils.h index fb6f53f117e..5e5c92bfb71 100644 --- a/mailnews/imap/src/nsImapUtils.h +++ b/mailnews/imap/src/nsImapUtils.h @@ -40,7 +40,8 @@ #include "nsString.h" #include "nsIMsgIncomingServer.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsIMailboxSpec.h" class nsImapFlagAndUidState; @@ -67,7 +68,7 @@ extern nsresult nsCreateImapBaseMessageURI(const nsACString& baseURI, nsCString& baseMessageURI); void AllocateImapUidString(PRUint32 *msgUids, PRUint32 &msgCount, nsImapFlagAndUidState *flagState, nsCString &returnString); -void ParseUidString(const char *uidString, nsMsgKeyArray &keys); +void ParseUidString(const char *uidString, nsTArray &keys); void AppendUid(nsCString &msgIds, PRUint32 uid); diff --git a/mailnews/local/src/nsLocalMailFolder.cpp b/mailnews/local/src/nsLocalMailFolder.cpp index 831942d23b5..664f63d536f 100644 --- a/mailnews/local/src/nsLocalMailFolder.cpp +++ b/mailnews/local/src/nsLocalMailFolder.cpp @@ -109,7 +109,6 @@ #include "nsLocalStrings.h" static NS_DEFINE_CID(kMailboxServiceCID, NS_MAILBOXSERVICE_CID); -static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID); ////////////////////////////////////////////////////////////////////////////// // nsLocal @@ -1543,13 +1542,13 @@ nsMsgLocalMailFolder::OnCopyCompleted(nsISupports *srcSupport, PRBool moveCopySu } nsresult -nsMsgLocalMailFolder::SortMessagesBasedOnKey(nsISupportsArray *messages, nsMsgKeyArray &aKeyArray, nsIMsgFolder *srcFolder) +nsMsgLocalMailFolder::SortMessagesBasedOnKey(nsISupportsArray *messages, nsTArray &aKeyArray, nsIMsgFolder *srcFolder) { nsresult rv = NS_OK; PRUint32 numMessages = 0; rv = messages->Count(&numMessages); NS_ENSURE_SUCCESS(rv,rv); - NS_ASSERTION ((numMessages == aKeyArray.GetSize()), "message array and key array size are not same"); + NS_ASSERTION ((numMessages == aKeyArray.Length()), "message array and key array size are not same"); rv = messages->Clear(); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr msgHdr; @@ -2773,9 +2772,9 @@ nsresult nsMsgLocalMailFolder::CopyMessagesTo(nsISupportsArray *messages, if (NS_SUCCEEDED(rv) && mCopyState->m_messageService) { - nsMsgKeyArray keyArray; PRUint32 numMessages = 0; messages->Count(&numMessages); + nsTArray keyArray(numMessages); for (PRUint32 i = 0; i < numMessages; i++) { nsCOMPtr aMessage = do_QueryElementAt(messages, i, &rv); @@ -2783,10 +2782,10 @@ nsresult nsMsgLocalMailFolder::CopyMessagesTo(nsISupportsArray *messages, { nsMsgKey key; aMessage->GetMessageKey(&key); - keyArray.Add(key); + keyArray.AppendElement(key); } } - keyArray.QuickSort(); + keyArray.Sort(); rv = SortMessagesBasedOnKey(messages, keyArray, srcFolder); NS_ENSURE_SUCCESS(rv,rv); @@ -3373,7 +3372,7 @@ NS_IMETHODIMP nsMsgLocalMailFolder::NotifyCompactCompleted() { mExpungedBytes = 0; - m_newMsgs.RemoveAll(); // if compacted, m_newMsgs probably aren't valid. + m_newMsgs.Clear(); // if compacted, m_newMsgs probably aren't valid. (void) RefreshSizeOnDisk(); (void) CloseDBIfFolderNotOpen(); nsCOMPtr compactCompletedAtom; @@ -3466,7 +3465,7 @@ nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus a { rv = folder->SetFlag(MSG_FOLDER_FLAG_JUNK); NS_ENSURE_SUCCESS(rv,rv); - mSpamKeysToMove.Add(msgKey); + mSpamKeysToMove.AppendElement(msgKey); willMoveMessage = PR_TRUE; } else @@ -3476,7 +3475,7 @@ nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus a // the listener should do // rv = folder->SetFlag(MSG_FOLDER_FLAG_JUNK); // NS_ENSURE_SUCCESS(rv,rv); - // mSpamKeysToMove.Add(msgKey); + // mSpamKeysToMove.AppendElement(msgKey); // willMoveMessage = PR_TRUE; rv = GetOrCreateFolder(mSpamFolderURI, nsnull /* aListener */); NS_ASSERTION(NS_SUCCEEDED(rv), "GetOrCreateFolder failed"); @@ -3489,7 +3488,7 @@ nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus a if (mNumFilterClassifyRequests == 0) { - if (mSpamKeysToMove.GetSize() > 0) + if (!mSpamKeysToMove.IsEmpty()) { if (!mSpamFolderURI.IsEmpty()) { @@ -3498,7 +3497,7 @@ nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus a if (NS_SUCCEEDED(rv) && folder) { nsCOMPtr messages; NS_NewISupportsArray(getter_AddRefs(messages)); - for (PRUint32 keyIndex = 0; keyIndex < mSpamKeysToMove.GetSize(); keyIndex++) + for (PRUint32 keyIndex = 0; keyIndex < mSpamKeysToMove.Length(); keyIndex++) { nsCOMPtr mailHdr = nsnull; rv = GetMessageHeader(mSpamKeysToMove.ElementAt(keyIndex), getter_AddRefs(mailHdr)); @@ -3526,8 +3525,8 @@ nsMsgLocalMailFolder::OnMessageClassified(const char *aMsgURI, nsMsgJunkStatus a } PRInt32 numNewMessages; GetNumNewMessages(PR_FALSE, &numNewMessages); - SetNumNewMessages(numNewMessages - mSpamKeysToMove.GetSize()); - mSpamKeysToMove.RemoveAll(); + SetNumNewMessages(numNewMessages - mSpamKeysToMove.Length()); + mSpamKeysToMove.Clear(); // check if this is the inbox first... if (mFlags & MSG_FOLDER_FLAG_INBOX) PerformBiffNotifications(); diff --git a/mailnews/local/src/nsLocalMailFolder.h b/mailnews/local/src/nsLocalMailFolder.h index e8455383442..b105e1324d2 100644 --- a/mailnews/local/src/nsLocalMailFolder.h +++ b/mailnews/local/src/nsLocalMailFolder.h @@ -214,7 +214,7 @@ protected: // copy message helper nsresult DisplayMoveCopyStatusMsg(); - nsresult SortMessagesBasedOnKey(nsISupportsArray *messages, nsMsgKeyArray &aKeyArray, nsIMsgFolder *srcFolder); + nsresult SortMessagesBasedOnKey(nsISupportsArray *messages, nsTArray &aKeyArray, nsIMsgFolder *srcFolder); nsresult CopyMessageTo(nsISupports *message, nsIMsgFolder *dstFolder, nsIMsgWindow *msgWindow, PRBool isMove); @@ -242,7 +242,7 @@ protected: PRPackedBool m_parsingFolder; nsCOMPtr mReparseListener; PRInt32 mNumFilterClassifyRequests; - nsMsgKeyArray mSpamKeysToMove; + nsTArray mSpamKeysToMove; nsCString mSpamFolderURI; nsresult setSubfolderFlag(const nsAString& aFolderName, PRUint32 flags); diff --git a/mailnews/local/src/nsLocalUndoTxn.cpp b/mailnews/local/src/nsLocalUndoTxn.cpp index 10963f55be5..9af39df8392 100644 --- a/mailnews/local/src/nsLocalUndoTxn.cpp +++ b/mailnews/local/src/nsLocalUndoTxn.cpp @@ -125,7 +125,7 @@ nsLocalMoveCopyMsgTxn::SetDstFolder(nsIMsgFolder* dstFolder) nsresult nsLocalMoveCopyMsgTxn::AddSrcKey(nsMsgKey aKey) { - m_srcKeyArray.Add(aKey); + m_srcKeyArray.AppendElement(aKey); return NS_OK; } @@ -140,7 +140,7 @@ nsLocalMoveCopyMsgTxn::AddSrcStatusOffset(PRUint32 aStatusOffset) nsresult nsLocalMoveCopyMsgTxn::AddDstKey(nsMsgKey aKey) { - m_dstKeyArray.Add(aKey); + m_dstKeyArray.AppendElement(aKey); return NS_OK; } @@ -153,7 +153,7 @@ nsLocalMoveCopyMsgTxn::AddDstMsgSize(PRUint32 msgSize) nsresult nsLocalMoveCopyMsgTxn::UndoImapDeleteFlag(nsIMsgFolder* folder, - nsMsgKeyArray& keyArray, + nsTArray& keyArray, PRBool deleteFlag) { nsresult rv = NS_ERROR_FAILURE; @@ -163,7 +163,7 @@ nsLocalMoveCopyMsgTxn::UndoImapDeleteFlag(nsIMsgFolder* folder, NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr urlListener; nsCString msgIds; - PRUint32 i, count = keyArray.GetSize(); + PRUint32 i, count = keyArray.Length(); urlListener = do_QueryInterface(folder, &rv); for (i=0; i < count; i++) { @@ -268,7 +268,7 @@ nsLocalMoveCopyMsgTxn::UndoTransactionInternal() rv = dstFolder->GetMsgDatabase(nsnull, getter_AddRefs(dstDB)); if (NS_FAILED(rv)) return rv; - PRUint32 count = m_srcKeyArray.GetSize(); + PRUint32 count = m_srcKeyArray.Length(); PRUint32 i; nsCOMPtr oldHdr; nsCOMPtr newHdr; @@ -344,7 +344,7 @@ nsLocalMoveCopyMsgTxn::RedoTransaction() rv = dstFolder->GetMsgDatabase(nsnull, getter_AddRefs(dstDB)); if (NS_FAILED(rv)) return rv; - PRUint32 count = m_srcKeyArray.GetSize(); + PRUint32 count = m_srcKeyArray.Length(); PRUint32 i; nsCOMPtr oldHdr; nsCOMPtr newHdr; @@ -384,8 +384,8 @@ nsLocalMoveCopyMsgTxn::RedoTransaction() { // protect against a bogus undo txn without any source keys // see bug #179856 for details - NS_ASSERTION(m_srcKeyArray.GetSize(), "no source keys"); - if (!m_srcKeyArray.GetSize()) + NS_ASSERTION(!m_srcKeyArray.IsEmpty(), "no source keys"); + if (m_srcKeyArray.IsEmpty()) return NS_ERROR_UNEXPECTED; PRBool deleteFlag = PR_FALSE; //message is un-deleted- we are trying to redo diff --git a/mailnews/local/src/nsLocalUndoTxn.h b/mailnews/local/src/nsLocalUndoTxn.h index 98ff95c3dba..1a216f64261 100644 --- a/mailnews/local/src/nsLocalUndoTxn.h +++ b/mailnews/local/src/nsLocalUndoTxn.h @@ -42,7 +42,7 @@ #include "nsIMsgFolder.h" #include "nsMailboxService.h" #include "nsMsgTxn.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" #include "nsTArray.h" #include "nsCOMPtr.h" #include "nsIUrlListener.h" @@ -81,16 +81,16 @@ public: nsIMsgFolder* dstFolder, PRBool isMove); nsresult UndoImapDeleteFlag(nsIMsgFolder* aFolder, - nsMsgKeyArray& aKeyArray, + nsTArray& aKeyArray, PRBool deleteFlag); nsresult UndoTransactionInternal(); private: nsWeakPtr m_srcFolder; - nsMsgKeyArray m_srcKeyArray; // used when src is local or imap + nsTArray m_srcKeyArray; // used when src is local or imap nsTArray m_srcStatusOffsetArray; // used when src is local nsWeakPtr m_dstFolder; - nsMsgKeyArray m_dstKeyArray; + nsTArray m_dstKeyArray; PRBool m_isMove; PRBool m_srcIsImap4; nsTArray m_dstSizeArray; diff --git a/mailnews/local/src/nsMailboxService.cpp b/mailnews/local/src/nsMailboxService.cpp index d60ebf27bcc..294fee56c0d 100644 --- a/mailnews/local/src/nsMailboxService.cpp +++ b/mailnews/local/src/nsMailboxService.cpp @@ -46,7 +46,8 @@ #include "nsMailboxProtocol.h" #include "nsIMsgDatabase.h" #include "nsMsgDBCID.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsLocalUtils.h" #include "nsMsgLocalCID.h" #include "nsMsgBaseCID.h" @@ -127,7 +128,7 @@ nsresult nsMailboxService::CopyMessage(const char * aSrcMailboxURI, return FetchMessage(aSrcMailboxURI, aMailboxCopyHandler, aMsgWindow, aUrlListener, nsnull, mailboxAction, nsnull, aURL); } -nsresult nsMailboxService::CopyMessages(nsMsgKeyArray &msgKeys, +nsresult nsMailboxService::CopyMessages(nsTArray &msgKeys, nsIMsgFolder *srcFolder, nsIStreamListener * aMailboxCopyHandler, PRBool moveMessage, @@ -162,7 +163,7 @@ nsresult nsMailboxService::CopyMessages(nsMsgKeyArray &msgKeys, nsCOMPtr mailboxUrl (do_QueryInterface(url)); msgUrl->SetMsgWindow(aMsgWindow); - mailboxUrl->SetMoveCopyMsgKeys(msgKeys.GetArray(), msgKeys.GetSize()); + mailboxUrl->SetMoveCopyMsgKeys(msgKeys.Elements(), msgKeys.Length()); rv = RunMailboxUrl(url, aMailboxCopyHandler); } } diff --git a/mailnews/local/src/nsMailboxUrl.cpp b/mailnews/local/src/nsMailboxUrl.cpp index d7bdb4fb85d..ab795f8b8bc 100644 --- a/mailnews/local/src/nsMailboxUrl.cpp +++ b/mailnews/local/src/nsMailboxUrl.cpp @@ -488,9 +488,8 @@ NS_IMETHODIMP nsMailboxUrl::SetCharsetOverRide(const char * aCharacterSet) /* void setMoveCopyMsgKeys (out nsMsgKey keysToFlag, in long numKeys); */ NS_IMETHODIMP nsMailboxUrl::SetMoveCopyMsgKeys(nsMsgKey *keysToFlag, PRInt32 numKeys) { - m_keys.RemoveAll(); - m_keys.Add(keysToFlag, numKeys); - if (m_keys.GetSize() > 0 && m_messageKey == nsMsgKey_None) + m_keys.ReplaceElementsAt(0, m_keys.Length(), keysToFlag, numKeys); + if (!m_keys.IsEmpty() && m_messageKey == nsMsgKey_None) m_messageKey = m_keys[0]; return NS_OK; } @@ -498,7 +497,7 @@ NS_IMETHODIMP nsMailboxUrl::SetMoveCopyMsgKeys(nsMsgKey *keysToFlag, PRInt32 num NS_IMETHODIMP nsMailboxUrl::GetMoveCopyMsgHdrForIndex(PRUint32 msgIndex, nsIMsgDBHdr **msgHdr) { NS_ENSURE_ARG(msgHdr); - if (msgIndex < m_keys.GetSize()) + if (msgIndex < m_keys.Length()) { nsMsgKey nextKey = m_keys[msgIndex]; return GetMsgHdrForKey(nextKey, msgHdr); @@ -509,7 +508,7 @@ NS_IMETHODIMP nsMailboxUrl::GetMoveCopyMsgHdrForIndex(PRUint32 msgIndex, nsIMsgD NS_IMETHODIMP nsMailboxUrl::GetNumMoveCopyMsgs(PRUint32 *numMsgs) { NS_ENSURE_ARG(numMsgs); - *numMsgs = m_keys.GetSize(); + *numMsgs = m_keys.Length(); return NS_OK; } diff --git a/mailnews/local/src/nsMailboxUrl.h b/mailnews/local/src/nsMailboxUrl.h index ad55e16367b..85811757003 100644 --- a/mailnews/local/src/nsMailboxUrl.h +++ b/mailnews/local/src/nsMailboxUrl.h @@ -42,7 +42,8 @@ #include "nsMsgMailNewsUrl.h" #include "nsIFile.h" #include "nsCOMPtr.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" #include "nsISupportsObsolete.h" class nsMailboxUrl : public nsIMailboxUrl, public nsMsgMailNewsUrl, public nsIMsgMessageUrl, public nsIMsgI18NUrl @@ -104,7 +105,7 @@ protected: nsresult ParseSearchPart(); // for multiple msg move/copy - nsMsgKeyArray m_keys; + nsTArray m_keys; PRInt32 m_curMsgIndex; // truncated message support diff --git a/mailnews/local/src/nsParseMailbox.h b/mailnews/local/src/nsParseMailbox.h index b23916b322a..78cd70bd2ba 100644 --- a/mailnews/local/src/nsParseMailbox.h +++ b/mailnews/local/src/nsParseMailbox.h @@ -40,7 +40,6 @@ #include "nsIURI.h" #include "nsIMsgParseMailMsgState.h" -#include "nsMsgKeyArray.h" #include "nsVoidArray.h" #include "nsIStreamListener.h" #include "nsMsgLineBuffer.h" diff --git a/mailnews/mapi/mapihook/src/msgMapiImp.cpp b/mailnews/mapi/mapihook/src/msgMapiImp.cpp index db03d790149..e3bd5f66f20 100644 --- a/mailnews/mapi/mapihook/src/msgMapiImp.cpp +++ b/mailnews/mapi/mapihook/src/msgMapiImp.cpp @@ -895,8 +895,8 @@ MsgMapiListContext::DeleteMessage(nsMsgKey key) if (!m_db) return FALSE; - nsMsgKeyArray messageKeys; - messageKeys.InsertAt(0, key); + nsAutoTArray messageKeys; + messageKeys.AppendElement(key); if ( !IsIMAPHost() ) { diff --git a/mailnews/news/src/nsNNTPArticleList.cpp b/mailnews/news/src/nsNNTPArticleList.cpp index 4ab2e9de435..e20779fe910 100644 --- a/mailnews/news/src/nsNNTPArticleList.cpp +++ b/mailnews/news/src/nsNNTPArticleList.cpp @@ -85,10 +85,10 @@ NS_IMETHODIMP nsNNTPArticleList::AddArticleKey(PRInt32 key) { #ifdef DEBUG - m_idsOnServer.Add(key); + m_idsOnServer.AppendElement(key); #endif - if (m_dbIndex < m_idsInDB.GetSize()) + if (m_dbIndex < m_idsInDB.Length()) { PRInt32 idInDBToCheck = m_idsInDB[m_dbIndex]; // if there are keys in the database that aren't in the newsgroup @@ -98,9 +98,9 @@ nsNNTPArticleList::AddArticleKey(PRInt32 key) { m_newsFolder->RemoveMessage(idInDBToCheck); #ifdef DEBUG - m_idsDeleted.Add(idInDBToCheck); + m_idsDeleted.AppendElement(idInDBToCheck); #endif - if (m_dbIndex >= m_idsInDB.GetSize()) + if (m_dbIndex >= m_idsInDB.Length()) break; idInDBToCheck = m_idsInDB[++m_dbIndex]; } @@ -115,20 +115,20 @@ nsNNTPArticleList::FinishAddingArticleKeys() { // if the last n messages in the group are cancelled, they won't have gotten removed // so we have to go an removed them now. - PRUint32 totalCount = m_idsInDB.GetSize(); + PRUint32 totalCount = m_idsInDB.Length(); PRUint32 i; for (i = m_dbIndex; i < totalCount; i++) { m_newsFolder->RemoveMessage(m_idsInDB[i]); #ifdef DEBUG - m_idsDeleted.Add(m_idsInDB[i]); + m_idsDeleted.AppendElement(m_idsInDB[i]); #endif } #ifdef DEBUG // make sure none of the deleted turned up on the idsOnServer list - for (i = 0; i < m_idsDeleted.GetSize(); i++) { - NS_ASSERTION(m_idsOnServer.FindIndex((nsMsgKey)(m_idsDeleted[i]), 0) == nsMsgViewIndex_None, "a deleted turned up on the idsOnServer list"); + for (i = 0; i < m_idsDeleted.Length(); i++) { + NS_ASSERTION(m_idsOnServer.IndexOf((nsMsgKey)(m_idsDeleted[i]), 0) == nsMsgViewIndex_None, "a deleted turned up on the idsOnServer list"); } #endif return NS_OK; diff --git a/mailnews/news/src/nsNNTPArticleList.h b/mailnews/news/src/nsNNTPArticleList.h index 6988fb1ad2a..de15ce6160b 100644 --- a/mailnews/news/src/nsNNTPArticleList.h +++ b/mailnews/news/src/nsNNTPArticleList.h @@ -42,7 +42,8 @@ #include "nsINNTPArticleList.h" #include "nsIMsgNewsFolder.h" #include "nsIMsgDatabase.h" -#include "nsMsgKeyArray.h" +#include "MailNewsTypes.h" +#include "nsTArray.h" class nsNNTPArticleList : public nsINNTPArticleList { @@ -54,11 +55,11 @@ public: NS_DECL_NSINNTPARTICLELIST protected: - nsMsgKeyArray m_idsInDB; + nsTArray m_idsInDB; #ifdef DEBUG - nsMsgKeyArray m_idsOnServer; - nsMsgKeyArray m_idsDeleted; + nsTArray m_idsOnServer; + nsTArray m_idsDeleted; #endif nsCOMPtr m_newsFolder; diff --git a/mailnews/news/src/nsNewsDownloader.cpp b/mailnews/news/src/nsNewsDownloader.cpp index 003c1a751ba..599b026fffd 100644 --- a/mailnews/news/src/nsNewsDownloader.cpp +++ b/mailnews/news/src/nsNewsDownloader.cpp @@ -57,12 +57,12 @@ // if pIds is not null, download the articles whose id's are passed in. Otherwise, // which articles to download is determined by nsNewsDownloader object, // or subclasses thereof. News can download marked objects, for example. -nsresult nsNewsDownloader::DownloadArticles(nsIMsgWindow *window, nsIMsgFolder *folder, nsMsgKeyArray *pIds) +nsresult nsNewsDownloader::DownloadArticles(nsIMsgWindow *window, nsIMsgFolder *folder, nsTArray *pIds) { if (pIds != nsnull) - m_keysToDownload.InsertAt(0, pIds); + m_keysToDownload.InsertElementsAt(0, pIds->Elements(), pIds->Length()); - if (m_keysToDownload.GetSize() > 0) + if (!m_keysToDownload.IsEmpty()) m_downloadFromKeys = PR_TRUE; m_folder = folder; @@ -187,12 +187,12 @@ PRBool nsNewsDownloader::GetNextHdrToRetrieve() nsresult rv; if (m_downloadFromKeys) { - if (m_numwrote >= (PRInt32) m_keysToDownload.GetSize()) + if (m_numwrote >= (PRInt32) m_keysToDownload.Length()) return PR_FALSE; m_keyToDownload = m_keysToDownload[m_numwrote++]; PRInt32 percent; - percent = (100 * m_numwrote) / (PRInt32) m_keysToDownload.GetSize(); + percent = (100 * m_numwrote) / (PRInt32) m_keysToDownload.Length(); PRInt64 nowMS = LL_ZERO; if (percent < 100) // always need to do 100% @@ -219,7 +219,7 @@ PRBool nsNewsDownloader::GetNextHdrToRetrieve() nsAutoString firstStr; firstStr.AppendInt(m_numwrote); nsAutoString totalStr; - totalStr.AppendInt(m_keysToDownload.GetSize()); + totalStr.AppendInt(m_keysToDownload.Length()); nsString prettiestName; nsString statusString; @@ -298,14 +298,14 @@ NS_IMETHODIMP nsNewsDownloader::OnSearchHit(nsIMsgDBHdr *header, nsIMsgFolder *f { nsMsgKey key; header->GetMessageKey(&key); - m_keysToDownload.Add(key); + m_keysToDownload.AppendElement(key); } return NS_OK; } NS_IMETHODIMP nsNewsDownloader::OnSearchDone(nsresult status) { - if (m_keysToDownload.GetSize() == 0) + if (m_keysToDownload.IsEmpty()) { if (m_listener) return m_listener->OnStopRunningUrl(nsnull, NS_OK); @@ -519,7 +519,7 @@ nsresult DownloadMatchingNewsArticlesToNewsDB::RunSearch(nsIMsgFolder *folder, n m_newsDB = newsDB; m_searchSession = searchSession; - m_keysToDownload.RemoveAll(); + m_keysToDownload.Clear(); nsresult rv; NS_ENSURE_ARG(searchSession); NS_ENSURE_ARG(folder); diff --git a/mailnews/news/src/nsNewsDownloader.h b/mailnews/news/src/nsNewsDownloader.h index 53ab96650d6..311ad5ab65e 100644 --- a/mailnews/news/src/nsNewsDownloader.h +++ b/mailnews/news/src/nsNewsDownloader.h @@ -59,7 +59,7 @@ public: NS_DECL_NSIURLLISTENER NS_DECL_NSIMSGSEARCHNOTIFY - virtual nsresult DownloadArticles(nsIMsgWindow *window, nsIMsgFolder *folder, nsMsgKeyArray *pKeyArray); + virtual nsresult DownloadArticles(nsIMsgWindow *window, nsIMsgFolder *folder, nsTArray *pKeyArray); PRBool ShouldAbort() const { return m_abort; } @@ -73,7 +73,7 @@ protected: virtual PRInt32 StartDownload() {return 0;} virtual nsresult ShowProgress(const PRUnichar *progressString, PRInt32 percent); - nsMsgKeyArray m_keysToDownload; + nsTArray m_keysToDownload; nsCOMPtr m_folder; nsCOMPtr m_newsDB; nsCOMPtr m_listener; diff --git a/mailnews/news/src/nsNewsFolder.cpp b/mailnews/news/src/nsNewsFolder.cpp index 59b0faaa652..e54de57ebb6 100644 --- a/mailnews/news/src/nsNewsFolder.cpp +++ b/mailnews/news/src/nsNewsFolder.cpp @@ -95,7 +95,6 @@ #include "nsIMsgAccountManager.h" static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); -static NS_DEFINE_CID(kCNewsDB, NS_NEWSDB_CID); // ###tw This really ought to be the most // efficient file reading size for the current @@ -1529,7 +1528,7 @@ NS_IMETHODIMP nsMsgNewsFolder::SetSaveArticleOffline(PRBool aBool) NS_IMETHODIMP nsMsgNewsFolder::DownloadAllForOffline(nsIUrlListener *listener, nsIMsgWindow *msgWindow) { - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; SetSaveArticleOffline(PR_TRUE); nsresult rv; @@ -1553,7 +1552,7 @@ NS_IMETHODIMP nsMsgNewsFolder::DownloadAllForOffline(nsIUrlListener *listener, n pHeader->GetMessageKey(&msgKey); MsgFitsDownloadCriteria(msgKey, &shouldStoreMsgOffline); if (shouldStoreMsgOffline) - srcKeyArray.Add(msgKey); + srcKeyArray.AppendElement(msgKey); } } } @@ -1567,7 +1566,7 @@ NS_IMETHODIMP nsMsgNewsFolder::DownloadAllForOffline(nsIUrlListener *listener, n NS_IMETHODIMP nsMsgNewsFolder::DownloadMessagesForOffline(nsISupportsArray *messages, nsIMsgWindow *window) { - nsMsgKeyArray srcKeyArray; + nsTArray srcKeyArray; SetSaveArticleOffline(PR_TRUE); // ### TODO need to clear this when we've finished PRUint32 count = 0; PRUint32 i; @@ -1582,7 +1581,7 @@ NS_IMETHODIMP nsMsgNewsFolder::DownloadMessagesForOffline(nsISupportsArray *mess if (msgDBHdr) rv = msgDBHdr->GetMessageKey(&key); if (NS_SUCCEEDED(rv)) - srcKeyArray.Add(key); + srcKeyArray.AppendElement(key); } DownloadNewsArticlesToOfflineStore *downloadState = new DownloadNewsArticlesToOfflineStore(window, mDatabase, this); if (!downloadState) diff --git a/mailnews/news/src/nsNntpService.cpp b/mailnews/news/src/nsNntpService.cpp index 407d18a318b..64ab96e14f2 100644 --- a/mailnews/news/src/nsNntpService.cpp +++ b/mailnews/news/src/nsNntpService.cpp @@ -698,7 +698,7 @@ nsNntpService::CopyMessage(const char * aSrcMessageURI, nsIStreamListener * aMai } NS_IMETHODIMP -nsNntpService::CopyMessages(nsMsgKeyArray &keys, nsIMsgFolder *srcFolder, nsIStreamListener * aMailboxCopyHandler, PRBool moveMessage, +nsNntpService::CopyMessages(nsTArray &keys, nsIMsgFolder *srcFolder, nsIStreamListener * aMailboxCopyHandler, PRBool moveMessage, nsIUrlListener * aUrlListener, nsIMsgWindow *aMsgWindow, nsIURI **aURL) { return NS_ERROR_NOT_IMPLEMENTED;