emailservices/nmclientapi/src/nmapieventnotifier.cpp
changeset 49 00c7ae862740
parent 48 10eaf342f539
child 68 83cc6bae1de8
equal deleted inserted replaced
48:10eaf342f539 49:00c7ae862740
     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