From 302bf1b523012e11b60425d6eee1221ebc2724eb Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Sun, 3 Nov 2019 00:17:46 -0400 Subject: Issue #1258 - Part 1: Import mailnews, ldap, and mork from comm-esr52.9.1 --- mailnews/imap/src/nsImapOfflineSync.h | 92 +++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 mailnews/imap/src/nsImapOfflineSync.h (limited to 'mailnews/imap/src/nsImapOfflineSync.h') diff --git a/mailnews/imap/src/nsImapOfflineSync.h b/mailnews/imap/src/nsImapOfflineSync.h new file mode 100644 index 000000000..c339e8463 --- /dev/null +++ b/mailnews/imap/src/nsImapOfflineSync.h @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; 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 _nsImapOfflineSync_H_ +#define _nsImapOfflineSync_H_ + + +#include "mozilla/Attributes.h" +#include "nsIMsgDatabase.h" +#include "nsIUrlListener.h" +#include "nsIMsgOfflineImapOperation.h" +#include "nsIMsgWindow.h" +#include "nsIMsgFolder.h" +#include "nsCOMArray.h" +#include "nsIDBChangeListener.h" + +class nsImapOfflineSync : public nsIUrlListener, + public nsIMsgCopyServiceListener, + public nsIDBChangeListener { +public: // set to one folder to playback one folder only + nsImapOfflineSync(nsIMsgWindow *window, nsIUrlListener *listener, + nsIMsgFolder *singleFolderOnly = nullptr, + bool isPseudoOffline = false); + + NS_DECL_ISUPPORTS + NS_DECL_NSIURLLISTENER + NS_DECL_NSIMSGCOPYSERVICELISTENER + NS_DECL_NSIDBCHANGELISTENER + virtual nsresult ProcessNextOperation(); // this kicks off playback + + int32_t GetCurrentUIDValidity(); + void SetCurrentUIDValidity(int32_t uidvalidity) { mCurrentUIDValidity = uidvalidity; } + + void SetPseudoOffline(bool pseudoOffline) {m_pseudoOffline = pseudoOffline;} + bool ProcessingStaleFolderUpdate() { return m_singleFolderToUpdate != nullptr; } + + bool CreateOfflineFolder(nsIMsgFolder *folder); + void SetWindow(nsIMsgWindow *window); +protected: + virtual ~nsImapOfflineSync(); + + bool CreateOfflineFolders(); + bool DestFolderOnSameServer(nsIMsgFolder *destFolder); + bool AdvanceToNextServer(); + bool AdvanceToNextFolder(); + void AdvanceToFirstIMAPFolder(); + void DeleteAllOfflineOpsForCurrentDB(); + void ClearCurrentOps(); + // Clears m_currentDB, and unregister listener. + void ClearDB(); + void ProcessFlagOperation(nsIMsgOfflineImapOperation *currentOp); + void ProcessKeywordOperation(nsIMsgOfflineImapOperation *op); + void ProcessMoveOperation(nsIMsgOfflineImapOperation *currentOp); + void ProcessCopyOperation(nsIMsgOfflineImapOperation *currentOp); + void ProcessEmptyTrash(); + void ProcessAppendMsgOperation(nsIMsgOfflineImapOperation *currentOp, + nsOfflineImapOperationType opType); + + nsCOMPtr m_currentFolder; + nsCOMPtr m_singleFolderToUpdate; + nsCOMPtr m_window; + nsCOMPtr m_allServers; + nsCOMPtr m_allFolders; + nsCOMPtr m_currentServer; + nsCOMPtr m_serverEnumerator; + nsCOMPtr m_curTempFile; + + nsTArray m_CurrentKeys; + nsCOMArray m_currentOpsToClear; + uint32_t m_KeyIndex; + nsCOMPtr m_currentDB; + nsCOMPtr m_listener; + int32_t mCurrentUIDValidity; + int32_t mCurrentPlaybackOpType; // kFlagsChanged -> kMsgCopy -> kMsgMoved + bool m_mailboxupdatesStarted; + bool m_mailboxupdatesFinished; + bool m_pseudoOffline; // for queueing online events in offline db + bool m_createdOfflineFolders; + +}; + +class nsImapOfflineDownloader : public nsImapOfflineSync +{ +public: + nsImapOfflineDownloader(nsIMsgWindow *window, nsIUrlListener *listener); + virtual ~nsImapOfflineDownloader(); + virtual nsresult ProcessNextOperation() override; // this kicks off download +}; + +#endif -- cgit v1.2.3