xref: /haiku/src/servers/mail/MailDaemonApplication.h (revision ca8ed5ea660fb6275799a3b7f138b201c41a667b)
1 /*
2  * Copyright 2007-2013, Haiku, Inc. All rights reserved.
3  * Copyright 2001-2002 Dr. Zoidberg Enterprises. All rights reserved.
4  * Copyright 2011, Clemens Zeidler <haiku@clemens-zeidler.de>
5  * Distributed under the terms of the MIT License.
6  */
7 #ifndef MAIL_DAEMON_APPLICATION_H
8 #define MAIL_DAEMON_APPLICATION_H
9 
10 
11 #include <map>
12 
13 #include <Application.h>
14 #include <ObjectList.h>
15 #include <Message.h>
16 #include <MessageRunner.h>
17 #include <Node.h>
18 #include <Query.h>
19 #include <String.h>
20 
21 #include <MailProtocol.h>
22 
23 #include "LEDAnimation.h"
24 #include "DefaultNotifier.h"
25 
26 
27 class BNotification;
28 struct send_mails_info;
29 
30 
31 struct account_protocols {
32 	account_protocols();
33 
34 	image_id				inboundImage;
35 	BInboundMailProtocol*	inboundProtocol;
36 	image_id				outboundImage;
37 	BOutboundMailProtocol*	outboundProtocol;
38 };
39 
40 
41 typedef std::map<int32, account_protocols> AccountMap;
42 
43 
44 class MailDaemonApplication : public BApplication {
45 public:
46 								MailDaemonApplication();
47 	virtual						~MailDaemonApplication();
48 
49 	virtual void				ReadyToRun();
50 	virtual	void				RefsReceived(BMessage* message);
51 	virtual	void				MessageReceived(BMessage* message);
52 
53 	virtual void				Pulse();
54 	virtual bool				QuitRequested();
55 
56 			void				InstallDeskbarIcon();
57 			void				RemoveDeskbarIcon();
58 
59 			void				GetNewMessages(BMessage* message);
60 			void				SendPendingMessages(BMessage* message);
61 
62 			void				MakeMimeTypes(bool remakeMIMETypes = false);
63 
64 private:
65 			void				_InitAccounts();
66 			void				_InitAccount(BMailAccountSettings& settings);
67 			void				_ReloadAccounts(BMessage* message);
68 			void				_RemoveAccount(
69 									const account_protocols& account);
70 
71 			BInboundMailProtocol* _CreateInboundProtocol(
72 									BMailAccountSettings& settings,
73 									image_id& image);
74 			BOutboundMailProtocol* _CreateOutboundProtocol(
75 									BMailAccountSettings& settings,
76 									image_id& image);
77 
78 			BInboundMailProtocol* _InboundProtocol(int32 account);
79 			BOutboundMailProtocol* _OutboundProtocol(int32 account);
80 
81 			void				_InitNewMessagesCount();
82 			void				_UpdateNewMessagesNotification();
83 			void				_UpdateAutoCheckRunner();
84 
85 			void				_AddMessage(send_mails_info& info,
86 									const BEntry& entry, const BNode& node);
87 
88 	static	bool				_IsPending(BNode& node);
89 	static	bool				_IsEntryInTrash(BEntry& entry);
90 
91 private:
92 			BMessageRunner*		fAutoCheckRunner;
93 			BMailSettings		fSettingsFile;
94 
95 			int32				fNewMessages;
96 			bool				fCentralBeep;
97 				// TRUE to do a beep when the status window closes. This happens
98 				// when all mail has been received, so you get one beep for
99 				// everything rather than individual beeps for each mail
100 				// account.
101 				// Set to TRUE by the 'mcbp' message that the mail Notification
102 				// filter sends us, cleared when the beep is done.
103 			BObjectList<BMessage> fFetchDoneRespondents;
104 			BObjectList<BQuery>	fQueries;
105 
106 			LEDAnimation*		fLEDAnimation;
107 
108 			BString				fAlertString;
109 
110 			AccountMap			fAccounts;
111 
112 			ErrorLogWindow*		fErrorLogWindow;
113 			BNotification*		fNotification;
114 };
115 
116 
117 #endif // MAIL_DAEMON_APPLICATION_H
118