16 */ |
16 */ |
17 |
17 |
18 #include <QList> |
18 #include <QList> |
19 #include <QVariant> |
19 #include <QVariant> |
20 #include <QString> |
20 #include <QString> |
|
21 #include <QTimer> |
21 |
22 |
22 #include "nmapiengine.h" |
23 #include "nmapiengine.h" |
|
24 #include <nmapieventnotifier.h> |
23 #include "nmapieventnotifier_p.h" |
25 #include "nmapieventnotifier_p.h" |
24 #include "nmapieventnotifier.h" |
|
25 |
26 |
26 |
27 const quint32 IntervalEmitingSignals = 10000; |
27 quint32 IntervalEmitingSignals = 10000; |
|
28 |
28 |
29 namespace EmailClientApi |
29 namespace EmailClientApi |
30 { |
30 { |
31 /*! |
31 /*! |
32 * Constructor |
32 Constructor |
33 */ |
33 */ |
34 NmEventNotifier::NmEventNotifier(QObject *parent) : |
34 NmApiEventNotifier::NmApiEventNotifier(QObject *parent) : |
35 NmMessageTask(parent) |
35 NmApiMessageTask(parent) |
36 |
36 |
37 { |
37 { |
38 //set timer |
38 //set timer |
39 mNmEventNotifierPrivate = new NmEventNotifierPrivate(this); |
39 mNmApiEventNotifierPrivate = new NmApiEventNotifierPrivate(this); |
40 mNmEventNotifierPrivate->mEmitSignals = new QTimer(this); |
40 mNmApiEventNotifierPrivate->mEmitSignals = new QTimer(this); |
41 mNmEventNotifierPrivate->mEmitSignals->setInterval(IntervalEmitingSignals); |
41 mNmApiEventNotifierPrivate->mEmitSignals->setInterval(IntervalEmitingSignals); |
42 connect(mNmEventNotifierPrivate->mEmitSignals, SIGNAL(timeout()), this, SLOT( |
42 connect(mNmApiEventNotifierPrivate->mEmitSignals, SIGNAL(timeout()), this, SLOT( |
43 sendEventsFromBuffer()), Qt::QueuedConnection); |
43 sendEventsFromBuffer()), Qt::QueuedConnection); |
44 |
44 |
45 } |
45 } |
46 |
46 |
47 /*! |
47 /*! |
48 * Destructor |
48 Destructor |
49 */ |
49 */ |
50 NmEventNotifier::~NmEventNotifier() |
50 NmApiEventNotifier::~NmApiEventNotifier() |
51 { |
51 { |
52 if (mNmEventNotifierPrivate->mIsRunning) { |
52 if (mNmApiEventNotifierPrivate->mIsRunning) { |
53 mNmEventNotifierPrivate->releaseEngine(); |
53 mNmApiEventNotifierPrivate->releaseEngine(); |
54 } |
54 } |
55 |
|
56 delete mNmEventNotifierPrivate; |
|
57 } |
55 } |
58 |
56 |
59 /*! |
57 /*! |
60 * Start monitoring email events |
58 Start monitoring email events |
61 * |
59 |
62 * \return Value tells about monitoring system running |
60 \return Value tells about monitoring system running |
63 */ |
61 */ |
64 bool NmEventNotifier::start() |
62 bool NmApiEventNotifier::start() |
65 { |
63 { |
66 bool result = false; |
64 bool result = false; |
67 |
65 |
68 if (mNmEventNotifierPrivate->mIsRunning) { |
66 if (mNmApiEventNotifierPrivate->mIsRunning) { |
69 result = true; |
67 result = true; |
70 } |
68 } |
71 else |
69 else |
72 if (!mNmEventNotifierPrivate->initializeEngine()) { |
70 if (!mNmApiEventNotifierPrivate->initializeEngine()) { |
73 mNmEventNotifierPrivate->mIsRunning = false; |
71 mNmApiEventNotifierPrivate->mIsRunning = false; |
74 result = false; |
72 result = false; |
75 } |
73 } |
76 else { |
74 else { |
77 qRegisterMetaType<QList<quint64> > ("QList<quint64>"); |
75 qRegisterMetaType<QList<quint64> > ("QList<quint64>"); |
78 qRegisterMetaType<NmApiMessage> ("NmApiMessage"); |
76 qRegisterMetaType<NmApiMessage> ("NmApiMessage"); |
79 |
77 |
80 connect(mNmEventNotifierPrivate->mEngine, SIGNAL(emailStoreEvent(NmApiMessage)), this, |
78 connect(mNmApiEventNotifierPrivate->mEngine, SIGNAL(emailStoreEvent(NmApiMessage)), mNmApiEventNotifierPrivate, |
81 SLOT(emailStoreEvent(NmApiMessage)), Qt::QueuedConnection); |
79 SLOT(emailStoreEvent(NmApiMessage)), Qt::QueuedConnection); |
82 |
80 |
83 mNmEventNotifierPrivate->mEmitSignals->start(); |
81 mNmApiEventNotifierPrivate->mEmitSignals->start(); |
84 mNmEventNotifierPrivate->mIsRunning = true; |
82 mNmApiEventNotifierPrivate->mIsRunning = true; |
85 result = true; |
83 result = true; |
86 } |
84 } |
87 return result; |
85 return result; |
88 } |
86 } |
89 |
87 |
90 /*! |
88 /*! |
91 * Cancels monitoring. |
89 Cancels monitoring. |
92 * |
90 |
93 * In user responsibility is to cancel monitoring. |
91 In user responsibility is to cancel monitoring. |
94 * On end it clear buffer events and emits \sa NmMessageTask::canceled() signal. |
92 On end it clear buffer events and emits \sa NmApiMessageTask::canceled() signal. |
95 */ |
93 */ |
96 void NmEventNotifier::cancel() |
94 void NmApiEventNotifier::cancel() |
97 { |
95 { |
98 if (!mNmEventNotifierPrivate->mIsRunning) { |
96 mNmApiEventNotifierPrivate->cancel(); |
99 return; |
|
100 } |
|
101 |
|
102 mNmEventNotifierPrivate->mIsRunning = false; |
|
103 mNmEventNotifierPrivate->mEmitSignals->stop(); |
|
104 |
|
105 if (mNmEventNotifierPrivate->mEngine) { |
|
106 disconnect(mNmEventNotifierPrivate->mEngine, SIGNAL(emailStoreEvent(NmApiMessage)), this, |
|
107 SLOT(emailStoreEvent(NmApiMessage))); |
|
108 } |
|
109 |
|
110 mNmEventNotifierPrivate->releaseEngine(); |
|
111 |
|
112 mNmEventNotifierPrivate->mBufferOfEvents.clear(); |
|
113 |
|
114 emit canceled(); |
97 emit canceled(); |
115 } |
98 } |
116 |
99 |
117 bool NmEventNotifier::isRunning() const |
100 /*! |
|
101 Informs if event notifier is running |
|
102 */ |
|
103 bool NmApiEventNotifier::isRunning() const |
118 { |
104 { |
119 return mNmEventNotifierPrivate->mIsRunning; |
105 return mNmApiEventNotifierPrivate->mIsRunning; |
120 } |
106 } |
121 |
107 |
122 /*! |
108 /*! |
123 * It check each object in buffer and emit signal with it. |
109 It check each object in buffer and emit signal with it. |
124 * |
110 |
125 * After end of work of this function buffer is empty. |
111 After end of work of this function buffer is empty. |
126 * It is called by timeout signal from timer. |
112 It is called by timeout signal from timer. |
127 */ |
113 */ |
128 void NmEventNotifier::sendEventsFromBuffer() |
114 void NmApiEventNotifier::sendEventsFromBuffer() |
129 { |
115 { |
130 qRegisterMetaType<MailboxEvent> ("MailboxEvent"); |
116 qRegisterMetaType<EmailClientApi::NmApiMailboxEvent> ("EmailClientApi::NmApiMailboxEvent"); |
131 qRegisterMetaType<MailboxEvent> ("MessageEvent"); |
117 qRegisterMetaType<EmailClientApi::NmApiMessageEvent> ("EmailClientApi::NmApiMessageEvent"); |
132 NmApiMessage events; |
118 NmApiMessage events; |
133 while (!mNmEventNotifierPrivate->mBufferOfEvents.isEmpty()) { |
119 while (!mNmApiEventNotifierPrivate->mBufferOfEvents.isEmpty()) { |
134 events = mNmEventNotifierPrivate->mBufferOfEvents.takeFirst(); |
120 events = mNmApiEventNotifierPrivate->mBufferOfEvents.takeFirst(); |
135 switch (events.objectType) { |
121 switch (events.objectType) { |
136 case EMailbox: |
122 case EMailbox: |
137 switch (events.action) { |
123 switch (events.action) { |
138 case ENew: |
124 case ENew: |
139 emit mailboxEvent(MailboxCreated, events.objectIds); |
125 emit mailboxEvent(MailboxCreated, events.objectIds); |