emailservices/nmclientapi/src/nmapieventnotifier.cpp
branchGCC_SURGE
changeset 55 cdd802add233
parent 54 997a02608b3a
child 75 47d84de1c893
equal deleted inserted replaced
28:011f79704660 55:cdd802add233
     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".
    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