From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- comm/mailnews/base/src/nsMsgSearchDBView.h | 182 +++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 comm/mailnews/base/src/nsMsgSearchDBView.h (limited to 'comm/mailnews/base/src/nsMsgSearchDBView.h') diff --git a/comm/mailnews/base/src/nsMsgSearchDBView.h b/comm/mailnews/base/src/nsMsgSearchDBView.h new file mode 100644 index 0000000000..3dd363b58f --- /dev/null +++ b/comm/mailnews/base/src/nsMsgSearchDBView.h @@ -0,0 +1,182 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef _nsMsgSearchDBViews_H_ +#define _nsMsgSearchDBViews_H_ + +#include "mozilla/Attributes.h" +#include "nsMsgGroupView.h" +#include "nsIMsgCopyServiceListener.h" +#include "nsIMsgSearchNotify.h" +#include "nsMsgXFViewThread.h" +#include "nsCOMArray.h" +#include "mozilla/UniquePtr.h" +#include "nsIWeakReferenceUtils.h" + +class nsMsgSearchDBView : public nsMsgGroupView, + public nsIMsgCopyServiceListener, + public nsIMsgSearchNotify { + public: + nsMsgSearchDBView(); + + // these are tied together pretty intimately + friend class nsMsgXFViewThread; + + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIMSGSEARCHNOTIFY + NS_DECL_NSIMSGCOPYSERVICELISTENER + + NS_IMETHOD SetSearchSession(nsIMsgSearchSession* aSearchSession) override; + + virtual const char* GetViewName(void) override { return "SearchView"; } + NS_IMETHOD Open(nsIMsgFolder* folder, nsMsgViewSortTypeValue sortType, + nsMsgViewSortOrderValue sortOrder, + nsMsgViewFlagsTypeValue viewFlags, int32_t* pCount) override; + NS_IMETHOD CloneDBView(nsIMessenger* aMessengerInstance, + nsIMsgWindow* aMsgWindow, + nsIMsgDBViewCommandUpdater* aCmdUpdater, + nsIMsgDBView** _retval) override; + NS_IMETHOD CopyDBView(nsMsgDBView* aNewMsgDBView, + nsIMessenger* aMessengerInstance, + nsIMsgWindow* aMsgWindow, + nsIMsgDBViewCommandUpdater* aCmdUpdater) override; + NS_IMETHOD Close() override; + NS_IMETHOD GetViewType(nsMsgViewTypeValue* aViewType) override; + NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, + nsMsgViewSortOrderValue sortOrder) override; + NS_IMETHOD GetCommandStatus( + nsMsgViewCommandTypeValue command, bool* selectable_p, + nsMsgViewCommandCheckStateValue* selected_p) override; + NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) override; + NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, + nsIMsgFolder* destFolder) override; + NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr** hdr) override; + NS_IMETHOD OpenWithHdrs(nsIMsgEnumerator* aHeaders, + nsMsgViewSortTypeValue aSortType, + nsMsgViewSortOrderValue aSortOrder, + nsMsgViewFlagsTypeValue aViewFlags, + int32_t* aCount) override; + NS_IMETHOD OnHdrDeleted(nsIMsgDBHdr* aHdrDeleted, nsMsgKey aParentKey, + int32_t aFlags, + nsIDBChangeListener* aInstigator) override; + NS_IMETHOD OnHdrFlagsChanged(nsIMsgDBHdr* aHdrChanged, uint32_t aOldFlags, + uint32_t aNewFlags, + nsIDBChangeListener* aInstigator) override; + NS_IMETHOD GetNumMsgsInView(int32_t* aNumMsgs) override; + // override to get location + NS_IMETHOD GetCellText(int32_t aRow, nsTreeColumn* aCol, + nsAString& aValue) override; + virtual nsresult GetMsgHdrForViewIndex(nsMsgViewIndex index, + nsIMsgDBHdr** msgHdr) override; + virtual nsresult OnNewHeader(nsIMsgDBHdr* newHdr, nsMsgKey parentKey, + bool ensureListed) override; + NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, + nsIMsgFolder** folder) override; + + NS_IMETHOD OnAnnouncerGoingAway(nsIDBChangeAnnouncer* instigator) override; + + virtual nsCOMArray* GetFolders() override; + virtual nsresult GetFolderFromMsgURI(const nsACString& aMsgURI, + nsIMsgFolder** aFolder) override; + + NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr* msgHdr, + nsIMsgThread** pThread) override; + + NS_IMETHOD ApplyCommandToIndices( + nsMsgViewCommandTypeValue command, + nsTArray const& selection) override; + + protected: + virtual ~nsMsgSearchDBView(); + virtual void InternalClose() override; + virtual nsresult HashHdr(nsIMsgDBHdr* msgHdr, nsString& aHashKey) override; + virtual nsresult ListIdsInThread(nsIMsgThread* threadHdr, + nsMsgViewIndex startOfThreadViewIndex, + uint32_t* pNumListed) override; + nsresult FetchLocation(int32_t aRow, nsAString& aLocationString); + virtual nsresult AddHdrFromFolder(nsIMsgDBHdr* msgHdr, nsIMsgFolder* folder); + virtual nsresult GetDBForViewIndex(nsMsgViewIndex index, + nsIMsgDatabase** db) override; + virtual nsresult RemoveByIndex(nsMsgViewIndex index) override; + virtual nsresult CopyMessages(nsIMsgWindow* window, + nsTArray const& selection, + bool isMove, nsIMsgFolder* destFolder) override; + virtual nsresult DeleteMessages(nsIMsgWindow* window, + nsTArray const& selection, + bool deleteStorage) override; + virtual void InsertMsgHdrAt(nsMsgViewIndex index, nsIMsgDBHdr* hdr, + nsMsgKey msgKey, uint32_t flags, + uint32_t level) override; + virtual void SetMsgHdrAt(nsIMsgDBHdr* hdr, nsMsgViewIndex index, + nsMsgKey msgKey, uint32_t flags, + uint32_t level) override; + virtual void InsertEmptyRows(nsMsgViewIndex viewIndex, + int32_t numRows) override; + virtual void RemoveRows(nsMsgViewIndex viewIndex, int32_t numRows) override; + virtual nsMsgViewIndex FindHdr(nsIMsgDBHdr* msgHdr, + nsMsgViewIndex startIndex = 0, + bool allowDummy = false) override; + nsresult GetFoldersAndHdrsForSelection( + nsTArray const& selection); + nsresult GroupSearchResultsByFolder(); + nsresult PartitionSelectionByFolder( + nsTArray const& selection, + mozilla::UniquePtr[]>& indexArrays, + int32_t* numArrays); + + virtual nsresult ApplyCommandToIndicesWithFolder( + nsMsgViewCommandTypeValue command, + nsTArray const& selection, + nsIMsgFolder* destFolder) override; + void MoveThreadAt(nsMsgViewIndex threadIndex); + + virtual nsresult GetMessageEnumerator(nsIMsgEnumerator** enumerator) override; + virtual nsresult InsertHdrFromFolder(nsIMsgDBHdr* msgHdr, + nsIMsgFolder* folder); + + // Holds the original folder of each message in this view. + // Augments the existing arrays in nsMsgDBView (m_keys, m_flags and m_levels), + // and is kept in sync with them. + nsCOMArray m_folders; + + nsTArray>> m_hdrsForEachFolder; + nsCOMArray m_uniqueFoldersSelected; + uint32_t mCurIndex; + + int32_t mTotalIndices; + nsCOMArray m_dbToUseList; + nsMsgViewCommandTypeValue mCommand; + nsCOMPtr mDestFolder; + nsWeakPtr m_searchSession; + + nsresult ProcessRequestsInOneFolder(nsIMsgWindow* window); + nsresult ProcessRequestsInAllFolders(nsIMsgWindow* window); + // these are for doing threading of the search hits + + // used for assigning thread id's to xfview threads. + nsMsgKey m_nextThreadId; + // this maps message-ids and reference message ids to + // the corresponding nsMsgXFViewThread object. If we're + // doing subject threading, we would throw subjects + // into the same table. + nsInterfaceHashtable m_threadsTable; + + // map message-ids to msg hdrs in the view, used for threading. + nsInterfaceHashtable m_hdrsTable; + uint32_t m_totalMessagesInView; + + virtual nsMsgGroupThread* CreateGroupThread(nsIMsgDatabase* db) override; + nsresult GetXFThreadFromMsgHdr(nsIMsgDBHdr* msgHdr, nsIMsgThread** pThread, + bool* foundByMessageId = nullptr); + bool GetThreadFromHash(nsCString& reference, nsIMsgThread** thread); + bool GetMsgHdrFromHash(nsCString& reference, nsIMsgDBHdr** hdr); + nsresult AddRefToHash(nsCString& reference, nsIMsgThread* thread); + nsresult AddMsgToHashTables(nsIMsgDBHdr* msgHdr, nsIMsgThread* thread); + nsresult RemoveRefFromHash(nsCString& reference); + nsresult RemoveMsgFromHashTables(nsIMsgDBHdr* msgHdr); + nsresult InitRefHash(); +}; + +#endif -- cgit v1.2.3