* Copyright 2007-2015, Haiku, Inc. All rights reserved.
* Copyright 2001-2002 Dr. Zoidberg Enterprises. All rights reserved.
* Copyright 2011, Clemens Zeidler <haiku@clemens-zeidler.de>
* Distributed under the terms of the MIT License.
*/
#ifndef MAIL_DAEMON_APPLICATION_H
#define MAIL_DAEMON_APPLICATION_H
#include <map>
#include <ObjectList.h>
#include <Message.h>
#include <MessageRunner.h>
#include <Node.h>
#include <Query.h>
#include <Server.h>
#include <String.h>
#include <MailProtocol.h>
#include "LEDAnimation.h"
#include "DefaultNotifier.h"
class BNotification;
struct send_mails_info;
struct account_protocols {
account_protocols();
image_id inboundImage;
BInboundMailProtocol* inboundProtocol;
image_id outboundImage;
BOutboundMailProtocol* outboundProtocol;
};
typedef std::map<int32, account_protocols> AccountMap;
class MailDaemonApplication : public BServer {
public:
MailDaemonApplication();
virtual ~MailDaemonApplication();
virtual void ReadyToRun();
virtual void RefsReceived(BMessage* message);
virtual void MessageReceived(BMessage* message);
virtual void Pulse();
virtual bool QuitRequested();
void InstallDeskbarIcon();
void RemoveDeskbarIcon();
void GetNewMessages(BMessage* message);
void SendPendingMessages(BMessage* message);
void MakeMimeTypes(bool remakeMIMETypes = false);
private:
void _InitAccounts();
void _InitAccount(BMailAccountSettings& settings);
void _ReloadAccounts(BMessage* message);
void _RemoveAccount(
const account_protocols& account);
BInboundMailProtocol* _CreateInboundProtocol(
BMailAccountSettings& settings,
image_id& image);
BOutboundMailProtocol* _CreateOutboundProtocol(
BMailAccountSettings& settings,
image_id& image);
BInboundMailProtocol* _InboundProtocol(int32 account);
BOutboundMailProtocol* _OutboundProtocol(int32 account);
void _InitNewMessagesCount();
void _UpdateNewMessagesNotification();
void _UpdateAutoCheckRunner();
void _AddMessage(send_mails_info& info,
const BEntry& entry, const BNode& node);
static bool _IsPending(BNode& node);
static bool _IsEntryInTrash(BEntry& entry);
private:
BMessageRunner* fAutoCheckRunner;
BMailSettings fSettingsFile;
int32 fNewMessages;
bool fCentralBeep;
BObjectList<BMessage> fFetchDoneRespondents;
BObjectList<BQuery> fQueries;
LEDAnimation* fLEDAnimation;
BString fAlertString;
AccountMap fAccounts;
ErrorLogWindow* fErrorLogWindow;
BNotification* fNotification;
};
#endif