1 /* |
1 /* |
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
2 * Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies). |
3 * All rights reserved. |
3 * All rights reserved. |
4 * This component and the accompanying materials are made available |
4 * This component and the accompanying materials are made available |
5 * under the terms of "Eclipse Public License v1.0" |
5 * under the terms of "Eclipse Public License v1.0" |
6 * which accompanies this distribution, and is available |
6 * which accompanies this distribution, and is available |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
16 */ |
16 */ |
17 |
17 |
18 #include "nmapiheaders.h" |
18 #include "nmapiheaders.h" |
19 |
19 |
20 |
20 |
21 const quint32 IntervalEmitingSignals = 10000; |
|
22 |
21 |
23 namespace EmailClientApi |
22 namespace EmailClientApi |
24 { |
23 { |
25 /*! |
24 /*! |
26 Constructor |
25 Constructor |
27 */ |
26 */ |
28 NmApiEventNotifier::NmApiEventNotifier(QObject *parent) : |
27 NmApiEventNotifier::NmApiEventNotifier(QObject *parent) |
29 NmApiMessageTask(parent) |
28 :NmApiMessageTask(parent) |
30 |
|
31 { |
29 { |
32 NM_FUNCTION; |
30 NM_FUNCTION; |
33 |
31 |
34 //set timer |
|
35 mNmApiEventNotifierPrivate = new NmApiEventNotifierPrivate(this); |
32 mNmApiEventNotifierPrivate = new NmApiEventNotifierPrivate(this); |
36 mNmApiEventNotifierPrivate->mEmitSignals = new QTimer(this); |
33 connect(mNmApiEventNotifierPrivate, SIGNAL(timedOut()), this, SLOT( |
37 mNmApiEventNotifierPrivate->mEmitSignals->setInterval(IntervalEmitingSignals); |
|
38 connect(mNmApiEventNotifierPrivate->mEmitSignals, SIGNAL(timeout()), this, SLOT( |
|
39 sendEventsFromBuffer()), Qt::QueuedConnection); |
34 sendEventsFromBuffer()), Qt::QueuedConnection); |
40 |
35 |
41 } |
36 } |
42 |
37 |
43 /*! |
38 /*! |
44 Destructor |
39 Destructor |
45 */ |
40 */ |
46 NmApiEventNotifier::~NmApiEventNotifier() |
41 NmApiEventNotifier::~NmApiEventNotifier() |
47 { |
42 { |
48 NM_FUNCTION; |
43 NM_FUNCTION; |
49 |
44 if (mNmApiEventNotifierPrivate) { |
50 if (mNmApiEventNotifierPrivate->mIsRunning) { |
45 mNmApiEventNotifierPrivate->stop(); |
51 mNmApiEventNotifierPrivate->releaseEngine(); |
|
52 } |
46 } |
53 } |
47 } |
54 |
48 |
55 /*! |
49 /*! |
56 Start monitoring email events |
50 Start monitoring email events |
59 */ |
53 */ |
60 bool NmApiEventNotifier::start() |
54 bool NmApiEventNotifier::start() |
61 { |
55 { |
62 NM_FUNCTION; |
56 NM_FUNCTION; |
63 |
57 |
64 bool result = false; |
58 return mNmApiEventNotifierPrivate->start(); |
65 |
|
66 if (mNmApiEventNotifierPrivate->mIsRunning) { |
|
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 // initiate event listening |
|
82 mNmApiEventNotifierPrivate->mEngine->startCollectingEvents(); |
|
83 |
|
84 mNmApiEventNotifierPrivate->mEmitSignals->start(); |
|
85 mNmApiEventNotifierPrivate->mIsRunning = true; |
|
86 result = true; |
|
87 } |
|
88 } |
|
89 return result; |
|
90 } |
59 } |
91 |
60 |
92 /*! |
61 /*! |
93 Cancels monitoring. |
62 Cancels monitoring. |
94 |
63 |
95 In user responsibility is to cancel monitoring. |
64 In user responsibility is to cancel monitoring. |
96 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. |
97 */ |
66 */ |
98 void NmApiEventNotifier::cancel() |
67 void NmApiEventNotifier::cancel() |
99 { |
68 { |
100 NM_FUNCTION; |
69 NM_FUNCTION; |
101 |
70 |
108 */ |
77 */ |
109 bool NmApiEventNotifier::isRunning() const |
78 bool NmApiEventNotifier::isRunning() const |
110 { |
79 { |
111 NM_FUNCTION; |
80 NM_FUNCTION; |
112 |
81 |
113 return mNmApiEventNotifierPrivate->mIsRunning; |
82 return mNmApiEventNotifierPrivate->isRunning(); |
114 } |
83 } |
115 |
84 |
116 /*! |
85 /*! |
117 It check each object in buffer and emit signal with it. |
86 Checks each object in buffer and emits corresponding signal. |
118 |
87 Uses scheduled transmission. Can be called also directly to force the |
119 After end of work of this function buffer is empty. |
88 signal sending. |
120 It is called by timeout signal from timer. |
|
121 */ |
89 */ |
122 void NmApiEventNotifier::sendEventsFromBuffer() |
90 void NmApiEventNotifier::sendEventsFromBuffer() |
123 { |
91 { |
124 NM_FUNCTION; |
92 NM_FUNCTION; |
125 |
93 |
126 qRegisterMetaType<EmailClientApi::NmApiMailboxEvent> ("EmailClientApi::NmApiMailboxEvent"); |
94 qRegisterMetaType<EmailClientApi::NmApiMailboxEvent> ("EmailClientApi::NmApiMailboxEvent"); |
127 qRegisterMetaType<EmailClientApi::NmApiMessageEvent> ("EmailClientApi::NmApiMessageEvent"); |
95 qRegisterMetaType<EmailClientApi::NmApiMessageEvent> ("EmailClientApi::NmApiMessageEvent"); |
128 |
96 |
129 NmApiMessage events; |
97 QList<NmApiMessage> events; |
130 while (!mNmApiEventNotifierPrivate->mBufferOfEvents.isEmpty()) { |
98 mNmApiEventNotifierPrivate->events(events); |
131 events = mNmApiEventNotifierPrivate->mBufferOfEvents.takeFirst(); |
99 while (!events.isEmpty()) { |
132 switch (events.objectType) { |
100 NmApiMessage event = events.takeFirst(); |
|
101 switch (event.objectType) { |
133 case EMailbox: |
102 case EMailbox: |
134 switch (events.action) { |
103 switch (event.action) { |
135 case ENew: |
104 case ENew: { |
136 emit mailboxEvent(MailboxCreated, events.objectIds); |
105 emit mailboxEvent(MailboxCreated, event.objectIds); |
137 break; |
106 } |
138 case EChange: |
107 break; |
139 |
108 case EDeleted: { |
140 break; |
109 emit mailboxEvent(MailboxDeleted, event.objectIds); |
141 case EDeleted: |
110 } |
142 emit mailboxEvent(MailboxDeleted, events.objectIds); |
111 break; |
143 break; |
|
144 default: |
|
145 break; |
|
146 } |
|
147 break; |
|
148 case EFolder: |
|
149 switch (events.action) { |
|
150 case ENew: |
|
151 |
|
152 break; |
|
153 case EChange: |
|
154 |
|
155 break; |
|
156 case EDeleted: |
|
157 |
|
158 break; |
|
159 default: |
112 default: |
160 break; |
113 break; |
161 } |
114 } |
162 break; |
115 break; |
163 case EMessage: |
116 case EMessage: |
164 switch (events.action) { |
117 switch (event.action) { |
165 case ENew: |
118 case ENew: { |
166 emit messageEvent(MessageCreated, events.mailboxId, events.folderId, |
119 emit messageEvent(MessageCreated, event.mailboxId, event.folderId, |
167 events.objectIds); |
120 event.objectIds); |
|
121 } |
168 break; |
122 break; |
169 case EChange: |
123 case EChange: { |
170 emit messageEvent(MessageChanged, events.mailboxId, events.folderId, |
124 emit messageEvent(MessageChanged, event.mailboxId, event.folderId, |
171 events.objectIds); |
125 event.objectIds); |
|
126 } |
172 break; |
127 break; |
173 case EDeleted: |
128 case EDeleted: { |
174 emit messageEvent(MessageDeleted, events.mailboxId, events.folderId, |
129 emit messageEvent(MessageDeleted, event.mailboxId, event.folderId, |
175 events.objectIds); |
130 event.objectIds); |
|
131 } |
176 break; |
132 break; |
177 default: |
133 default: |
178 break; |
134 break; |
179 } |
135 } |
180 break; |
136 break; |
181 default: |
137 default: |
182 break; |
138 break; |
183 } |
139 } |
184 } |
140 } |
|
141 events.clear(); |
185 } |
142 } |
186 |
143 |
187 } //End of EmailClientApi |
144 } //End of EmailClientApi |
188 |
145 |