1 /*
2 * Copyright 2004-2012, Haiku Inc. All Rights Reserved.
3 * Copyright 2001-2002 Dr. Zoidberg Enterprises. All rights reserved.
4 *
5 * Distributed under the terms of the MIT License.
6 */
7
8
9 #include <MailDaemon.h>
10
11 #include <List.h>
12 #include <MailSettings.h>
13 #include <Messenger.h>
14 #include <Message.h>
15 #include <Roster.h>
16
17 #include <MailPrivate.h>
18
19
20 using namespace BPrivate;
21
22
BMailDaemon()23 BMailDaemon::BMailDaemon()
24 :
25 fDaemon(B_MAIL_DAEMON_SIGNATURE)
26 {
27 }
28
29
~BMailDaemon()30 BMailDaemon::~BMailDaemon()
31 {
32 }
33
34
35 bool
IsRunning()36 BMailDaemon::IsRunning()
37 {
38 return fDaemon.IsValid();
39 }
40
41
42 status_t
CheckMail(int32 accountID)43 BMailDaemon::CheckMail(int32 accountID)
44 {
45 if (!fDaemon.IsValid())
46 return B_MAIL_NO_DAEMON;
47
48 BMessage message(kMsgCheckMessage);
49 message.AddInt32("account", accountID);
50 return fDaemon.SendMessage(&message);
51 }
52
53
54 status_t
CheckAndSendQueuedMail(int32 accountID)55 BMailDaemon::CheckAndSendQueuedMail(int32 accountID)
56 {
57 if (!fDaemon.IsValid())
58 return B_MAIL_NO_DAEMON;
59
60 BMessage message(kMsgCheckAndSend);
61 message.AddInt32("account", accountID);
62 return fDaemon.SendMessage(&message);
63 }
64
65
66 status_t
SendQueuedMail()67 BMailDaemon::SendQueuedMail()
68 {
69 if (!fDaemon.IsValid())
70 return B_MAIL_NO_DAEMON;
71
72 return fDaemon.SendMessage(kMsgSendMessages);
73 }
74
75
76 int32
CountNewMessages(bool waitForFetchCompletion)77 BMailDaemon::CountNewMessages(bool waitForFetchCompletion)
78 {
79 if (!fDaemon.IsValid())
80 return B_MAIL_NO_DAEMON;
81
82 BMessage reply;
83 BMessage first(kMsgCountNewMessages);
84
85 if (waitForFetchCompletion)
86 first.AddBool("wait_for_fetch_done",true);
87
88 fDaemon.SendMessage(&first, &reply);
89
90 return reply.FindInt32("num_new_messages");
91 }
92
93
94 status_t
MarkAsRead(int32 account,const entry_ref & ref,read_flags flag)95 BMailDaemon::MarkAsRead(int32 account, const entry_ref& ref, read_flags flag)
96 {
97 if (!fDaemon.IsValid())
98 return B_MAIL_NO_DAEMON;
99
100 BMessage message(kMsgMarkMessageAsRead);
101 message.AddInt32("account", account);
102 message.AddRef("ref", &ref);
103 message.AddInt32("read", flag);
104
105 return fDaemon.SendMessage(&message);
106 }
107
108
109 status_t
FetchBody(const entry_ref & ref,BMessenger * listener)110 BMailDaemon::FetchBody(const entry_ref& ref, BMessenger* listener)
111 {
112 if (!fDaemon.IsValid())
113 return B_MAIL_NO_DAEMON;
114
115 BMessage message(kMsgFetchBody);
116 message.AddRef("refs", &ref);
117 if (listener != NULL)
118 message.AddMessenger("target", *listener);
119
120 BMessage reply;
121 return fDaemon.SendMessage(&message, &reply);
122 }
123
124
125 status_t
Quit()126 BMailDaemon::Quit()
127 {
128 if (!fDaemon.IsValid())
129 return B_MAIL_NO_DAEMON;
130
131 return fDaemon.SendMessage(B_QUIT_REQUESTED);
132 }
133
134
135 status_t
Launch()136 BMailDaemon::Launch()
137 {
138 status_t status = be_roster->Launch(B_MAIL_DAEMON_SIGNATURE);
139 if (status == B_OK)
140 fDaemon = BMessenger(B_MAIL_DAEMON_SIGNATURE);
141
142 return status;
143 }
144