emailservices/nmclientapi/src/nmapieventnotifier.cpp
changeset 23 2dc6caa42ec3
parent 20 ecc8def7944a
child 30 759dc5235cdb
equal deleted inserted replaced
20:ecc8def7944a 23:2dc6caa42ec3
    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);
   187     }
   173     }
   188 }
   174 }
   189 
   175 
   190 } //End of EmailClientApi
   176 } //End of EmailClientApi
   191 
   177 
   192 #include "moc_nmapieventnotifier.cpp"