13 * |
13 * |
14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 #include <QList> |
18 #include "nmapiheaders.h" |
19 #include <QVariant> |
|
20 #include <QString> |
|
21 #include <QTimer> |
|
22 |
19 |
23 #include "nmapiengine.h" |
|
24 #include <nmapieventnotifier.h> |
|
25 #include "nmapieventnotifier_p.h" |
|
26 |
20 |
27 const quint32 IntervalEmitingSignals = 10000; |
|
28 |
21 |
29 namespace EmailClientApi |
22 namespace EmailClientApi |
30 { |
23 { |
31 /*! |
24 /*! |
32 Constructor |
25 Constructor |
33 */ |
26 */ |
34 NmApiEventNotifier::NmApiEventNotifier(QObject *parent) : |
27 NmApiEventNotifier::NmApiEventNotifier(QObject *parent) |
35 NmApiMessageTask(parent) |
28 :NmApiMessageTask(parent) |
36 |
|
37 { |
29 { |
38 //set timer |
30 NM_FUNCTION; |
|
31 |
39 mNmApiEventNotifierPrivate = new NmApiEventNotifierPrivate(this); |
32 mNmApiEventNotifierPrivate = new NmApiEventNotifierPrivate(this); |
40 mNmApiEventNotifierPrivate->mEmitSignals = new QTimer(this); |
33 connect(mNmApiEventNotifierPrivate, SIGNAL(timedOut()), this, SLOT( |
41 mNmApiEventNotifierPrivate->mEmitSignals->setInterval(IntervalEmitingSignals); |
|
42 connect(mNmApiEventNotifierPrivate->mEmitSignals, SIGNAL(timeout()), this, SLOT( |
|
43 sendEventsFromBuffer()), Qt::QueuedConnection); |
34 sendEventsFromBuffer()), Qt::QueuedConnection); |
44 |
35 |
45 } |
36 } |
46 |
37 |
47 /*! |
38 /*! |
48 Destructor |
39 Destructor |
49 */ |
40 */ |
50 NmApiEventNotifier::~NmApiEventNotifier() |
41 NmApiEventNotifier::~NmApiEventNotifier() |
51 { |
42 { |
52 if (mNmApiEventNotifierPrivate->mIsRunning) { |
43 NM_FUNCTION; |
53 mNmApiEventNotifierPrivate->releaseEngine(); |
44 if (mNmApiEventNotifierPrivate) { |
|
45 mNmApiEventNotifierPrivate->stop(); |
54 } |
46 } |
55 } |
47 } |
56 |
48 |
57 /*! |
49 /*! |
58 Start monitoring email events |
50 Start monitoring email events |
59 |
51 |
60 \return Value tells about monitoring system running |
52 \return Value tells about monitoring system running |
61 */ |
53 */ |
62 bool NmApiEventNotifier::start() |
54 bool NmApiEventNotifier::start() |
63 { |
55 { |
64 bool result = false; |
56 NM_FUNCTION; |
65 |
57 |
66 if (mNmApiEventNotifierPrivate->mIsRunning) { |
58 return mNmApiEventNotifierPrivate->start(); |
67 result = true; |
|
68 } |
|
69 else |
|
70 if (!mNmApiEventNotifierPrivate->initializeEngine()) { |
|
71 mNmApiEventNotifierPrivate->mIsRunning = false; |
|
72 result = false; |
|
73 } |
|
74 else { |
|
75 qRegisterMetaType<QList<quint64> > ("QList<quint64>"); |
|
76 qRegisterMetaType<NmApiMessage> ("NmApiMessage"); |
|
77 |
|
78 connect(mNmApiEventNotifierPrivate->mEngine, SIGNAL(emailStoreEvent(NmApiMessage)), mNmApiEventNotifierPrivate, |
|
79 SLOT(emailStoreEvent(NmApiMessage)), Qt::QueuedConnection); |
|
80 |
|
81 mNmApiEventNotifierPrivate->mEmitSignals->start(); |
|
82 mNmApiEventNotifierPrivate->mIsRunning = true; |
|
83 result = true; |
|
84 } |
|
85 return result; |
|
86 } |
59 } |
87 |
60 |
88 /*! |
61 /*! |
89 Cancels monitoring. |
62 Cancels monitoring. |
90 |
63 |
91 In user responsibility is to cancel monitoring. |
64 In user responsibility is to cancel monitoring. |
92 On end it clear buffer events and emits \sa NmApiMessageTask::canceled() signal. |
65 On end it clears buffer events and emits \sa NmApiMessageTask::canceled() signal. |
93 */ |
66 */ |
94 void NmApiEventNotifier::cancel() |
67 void NmApiEventNotifier::cancel() |
95 { |
68 { |
|
69 NM_FUNCTION; |
|
70 |
96 mNmApiEventNotifierPrivate->cancel(); |
71 mNmApiEventNotifierPrivate->cancel(); |
97 emit canceled(); |
72 emit canceled(); |
98 } |
73 } |
99 |
74 |
100 /*! |
75 /*! |
101 Informs if event notifier is running |
76 Informs if event notifier is running |
102 */ |
77 */ |
103 bool NmApiEventNotifier::isRunning() const |
78 bool NmApiEventNotifier::isRunning() const |
104 { |
79 { |
105 return mNmApiEventNotifierPrivate->mIsRunning; |
80 NM_FUNCTION; |
|
81 |
|
82 return mNmApiEventNotifierPrivate->isRunning(); |
106 } |
83 } |
107 |
84 |
108 /*! |
85 /*! |
109 It check each object in buffer and emit signal with it. |
86 Checks each object in buffer and emits corresponding signal. |
110 |
87 Uses scheduled transmission. Can be called also directly to force the |
111 After end of work of this function buffer is empty. |
88 signal sending. |
112 It is called by timeout signal from timer. |
|
113 */ |
89 */ |
114 void NmApiEventNotifier::sendEventsFromBuffer() |
90 void NmApiEventNotifier::sendEventsFromBuffer() |
115 { |
91 { |
|
92 NM_FUNCTION; |
|
93 |
116 qRegisterMetaType<EmailClientApi::NmApiMailboxEvent> ("EmailClientApi::NmApiMailboxEvent"); |
94 qRegisterMetaType<EmailClientApi::NmApiMailboxEvent> ("EmailClientApi::NmApiMailboxEvent"); |
117 qRegisterMetaType<EmailClientApi::NmApiMessageEvent> ("EmailClientApi::NmApiMessageEvent"); |
95 qRegisterMetaType<EmailClientApi::NmApiMessageEvent> ("EmailClientApi::NmApiMessageEvent"); |
118 NmApiMessage events; |
96 |
119 while (!mNmApiEventNotifierPrivate->mBufferOfEvents.isEmpty()) { |
97 QList<NmApiMessage> events; |
120 events = mNmApiEventNotifierPrivate->mBufferOfEvents.takeFirst(); |
98 mNmApiEventNotifierPrivate->events(events); |
121 switch (events.objectType) { |
99 while (!events.isEmpty()) { |
|
100 NmApiMessage event = events.takeFirst(); |
|
101 switch (event.objectType) { |
122 case EMailbox: |
102 case EMailbox: |
123 switch (events.action) { |
103 switch (event.action) { |
124 case ENew: |
104 case ENew: { |
125 emit mailboxEvent(MailboxCreated, events.objectIds); |
105 emit mailboxEvent(MailboxCreated, event.objectIds); |
126 break; |
106 } |
127 case EChange: |
107 break; |
128 |
108 case EDeleted: { |
129 break; |
109 emit mailboxEvent(MailboxDeleted, event.objectIds); |
130 case EDeleted: |
110 } |
131 emit mailboxEvent(MailboxDeleted, events.objectIds); |
111 break; |
132 break; |
|
133 default: |
|
134 break; |
|
135 } |
|
136 break; |
|
137 case EFolder: |
|
138 switch (events.action) { |
|
139 case ENew: |
|
140 |
|
141 break; |
|
142 case EChange: |
|
143 |
|
144 break; |
|
145 case EDeleted: |
|
146 |
|
147 break; |
|
148 default: |
112 default: |
149 break; |
113 break; |
150 } |
114 } |
151 break; |
115 break; |
152 case EMessage: |
116 case EMessage: |
153 switch (events.action) { |
117 switch (event.action) { |
154 case ENew: |
118 case ENew: { |
155 emit messageEvent(MessageCreated, events.mailboxId, events.folderId, |
119 emit messageEvent(MessageCreated, event.mailboxId, event.folderId, |
156 events.objectIds); |
120 event.objectIds); |
|
121 } |
157 break; |
122 break; |
158 case EChange: |
123 case EChange: { |
159 emit messageEvent(MessageChanged, events.mailboxId, events.folderId, |
124 emit messageEvent(MessageChanged, event.mailboxId, event.folderId, |
160 events.objectIds); |
125 event.objectIds); |
|
126 } |
161 break; |
127 break; |
162 case EDeleted: |
128 case EDeleted: { |
163 emit messageEvent(MessageDeleted, events.mailboxId, events.folderId, |
129 emit messageEvent(MessageDeleted, event.mailboxId, event.folderId, |
164 events.objectIds); |
130 event.objectIds); |
|
131 } |
165 break; |
132 break; |
166 default: |
133 default: |
167 break; |
134 break; |
168 } |
135 } |
169 break; |
136 break; |
170 default: |
137 default: |
171 break; |
138 break; |
172 } |
139 } |
173 } |
140 } |
|
141 events.clear(); |
174 } |
142 } |
175 |
143 |
176 } //End of EmailClientApi |
144 } //End of EmailClientApi |
177 |
145 |