blob: 6e4f57411bf18f892d11f3bc1ce9ede63bfb37fe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* -*- 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 nsMsgMailSession_h___
#define nsMsgMailSession_h___
#include "nsIMsgMailSession.h"
#include "nsISupports.h"
#include "nsCOMPtr.h"
#include "nsIMsgStatusFeedback.h"
#include "nsIMsgWindow.h"
#include "nsCOMArray.h"
#include "nsIMsgShutdown.h"
#include "nsIObserver.h"
#include "nsIMutableArray.h"
#include "nsIMsgProgress.h"
#include "nsTArray.h"
#include "nsTObserverArray.h"
#include "nsIMsgUserFeedbackListener.h"
#include "nsIUrlListener.h"
///////////////////////////////////////////////////////////////////////////////////
// The mail session is a replacement for the old 4.x MSG_Master object. It contains
// mail session generic information such as the user's current mail identity, ....
// I'm starting this off as an empty interface and as people feel they need to
// add more information to it, they can. I think this is a better approach than
// trying to port over the old MSG_Master in its entirety as that had a lot of
// cruft in it....
//////////////////////////////////////////////////////////////////////////////////
class nsMsgMailSession : public nsIMsgMailSession,
public nsIFolderListener
{
public:
nsMsgMailSession();
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIMSGMAILSESSION
NS_DECL_NSIFOLDERLISTENER
nsresult Init();
nsresult GetSelectedLocaleDataDir(nsIFile *defaultsDir);
protected:
virtual ~nsMsgMailSession();
struct folderListener {
nsCOMPtr<nsIFolderListener> mListener;
uint32_t mNotifyFlags;
folderListener(nsIFolderListener *aListener, uint32_t aNotifyFlags)
: mListener(aListener), mNotifyFlags(aNotifyFlags) {}
folderListener(const folderListener &aListener)
: mListener(aListener.mListener), mNotifyFlags(aListener.mNotifyFlags) {}
~folderListener() {}
int operator==(nsIFolderListener* aListener) const {
return mListener == aListener;
}
int operator==(const folderListener &aListener) const {
return mListener == aListener.mListener &&
mNotifyFlags == aListener.mNotifyFlags;
}
};
nsTObserverArray<folderListener> mListeners;
nsTObserverArray<nsCOMPtr<nsIMsgUserFeedbackListener> > mFeedbackListeners;
nsCOMArray<nsIMsgWindow> mWindows;
// stick this here temporarily
nsCOMPtr <nsIMsgWindow> m_temporaryMsgWindow;
};
/********************************************************************************/
class nsMsgShutdownService : public nsIMsgShutdownService,
public nsIUrlListener,
public nsIObserver
{
public:
nsMsgShutdownService();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGSHUTDOWNSERVICE
NS_DECL_NSIURLLISTENER
NS_DECL_NSIOBSERVER
protected:
nsresult ProcessNextTask();
void AttemptShutdown();
private:
virtual ~nsMsgShutdownService();
nsCOMArray<nsIMsgShutdownTask> mShutdownTasks;
nsCOMPtr<nsIMsgProgress> mMsgProgress;
uint32_t mTaskIndex;
uint32_t mQuitMode;
bool mProcessedShutdown;
bool mQuitForced;
bool mReadyToQuit;
};
#endif /* nsMsgMailSession_h__ */
|