diff -r 011f79704660 -r cdd802add233 emailservices/nmclientapi/src/nmapieventnotifier.cpp --- a/emailservices/nmclientapi/src/nmapieventnotifier.cpp Fri Jun 11 16:23:29 2010 +0100 +++ b/emailservices/nmclientapi/src/nmapieventnotifier.cpp Thu Jul 22 16:30:28 2010 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -15,31 +15,22 @@ * */ -#include -#include -#include -#include +#include "nmapiheaders.h" -#include "nmapiengine.h" -#include -#include "nmapieventnotifier_p.h" -const quint32 IntervalEmitingSignals = 10000; namespace EmailClientApi { /*! Constructor */ -NmApiEventNotifier::NmApiEventNotifier(QObject *parent) : - NmApiMessageTask(parent) - +NmApiEventNotifier::NmApiEventNotifier(QObject *parent) +:NmApiMessageTask(parent) { - //set timer + NM_FUNCTION; + mNmApiEventNotifierPrivate = new NmApiEventNotifierPrivate(this); - mNmApiEventNotifierPrivate->mEmitSignals = new QTimer(this); - mNmApiEventNotifierPrivate->mEmitSignals->setInterval(IntervalEmitingSignals); - connect(mNmApiEventNotifierPrivate->mEmitSignals, SIGNAL(timeout()), this, SLOT( + connect(mNmApiEventNotifierPrivate, SIGNAL(timedOut()), this, SLOT( sendEventsFromBuffer()), Qt::QueuedConnection); } @@ -49,8 +40,9 @@ */ NmApiEventNotifier::~NmApiEventNotifier() { - if (mNmApiEventNotifierPrivate->mIsRunning) { - mNmApiEventNotifierPrivate->releaseEngine(); + NM_FUNCTION; + if (mNmApiEventNotifierPrivate) { + mNmApiEventNotifierPrivate->stop(); } } @@ -61,38 +53,21 @@ */ bool NmApiEventNotifier::start() { - bool result = false; - - if (mNmApiEventNotifierPrivate->mIsRunning) { - result = true; - } - else - if (!mNmApiEventNotifierPrivate->initializeEngine()) { - mNmApiEventNotifierPrivate->mIsRunning = false; - result = false; - } - else { - qRegisterMetaType > ("QList"); - qRegisterMetaType ("NmApiMessage"); - - connect(mNmApiEventNotifierPrivate->mEngine, SIGNAL(emailStoreEvent(NmApiMessage)), mNmApiEventNotifierPrivate, - SLOT(emailStoreEvent(NmApiMessage)), Qt::QueuedConnection); - - mNmApiEventNotifierPrivate->mEmitSignals->start(); - mNmApiEventNotifierPrivate->mIsRunning = true; - result = true; - } - return result; + NM_FUNCTION; + + return mNmApiEventNotifierPrivate->start(); } /*! Cancels monitoring. In user responsibility is to cancel monitoring. - On end it clear buffer events and emits \sa NmApiMessageTask::canceled() signal. + On end it clears buffer events and emits \sa NmApiMessageTask::canceled() signal. */ void NmApiEventNotifier::cancel() { + NM_FUNCTION; + mNmApiEventNotifierPrivate->cancel(); emit canceled(); } @@ -102,66 +77,58 @@ */ bool NmApiEventNotifier::isRunning() const { - return mNmApiEventNotifierPrivate->mIsRunning; + NM_FUNCTION; + + return mNmApiEventNotifierPrivate->isRunning(); } /*! - It check each object in buffer and emit signal with it. - - After end of work of this function buffer is empty. - It is called by timeout signal from timer. + Checks each object in buffer and emits corresponding signal. + Uses scheduled transmission. Can be called also directly to force the + signal sending. */ void NmApiEventNotifier::sendEventsFromBuffer() { + NM_FUNCTION; + qRegisterMetaType ("EmailClientApi::NmApiMailboxEvent"); qRegisterMetaType ("EmailClientApi::NmApiMessageEvent"); - NmApiMessage events; - while (!mNmApiEventNotifierPrivate->mBufferOfEvents.isEmpty()) { - events = mNmApiEventNotifierPrivate->mBufferOfEvents.takeFirst(); - switch (events.objectType) { + + QList events; + mNmApiEventNotifierPrivate->events(events); + while (!events.isEmpty()) { + NmApiMessage event = events.takeFirst(); + switch (event.objectType) { case EMailbox: - switch (events.action) { - case ENew: - emit mailboxEvent(MailboxCreated, events.objectIds); - break; - case EChange: - - break; - case EDeleted: - emit mailboxEvent(MailboxDeleted, events.objectIds); - break; - default: - break; - } - break; - case EFolder: - switch (events.action) { - case ENew: - - break; - case EChange: - - break; - case EDeleted: - - break; + switch (event.action) { + case ENew: { + emit mailboxEvent(MailboxCreated, event.objectIds); + } + break; + case EDeleted: { + emit mailboxEvent(MailboxDeleted, event.objectIds); + } + break; default: break; } break; case EMessage: - switch (events.action) { - case ENew: - emit messageEvent(MessageCreated, events.mailboxId, events.folderId, - events.objectIds); + switch (event.action) { + case ENew: { + emit messageEvent(MessageCreated, event.mailboxId, event.folderId, + event.objectIds); + } break; - case EChange: - emit messageEvent(MessageChanged, events.mailboxId, events.folderId, - events.objectIds); + case EChange: { + emit messageEvent(MessageChanged, event.mailboxId, event.folderId, + event.objectIds); + } break; - case EDeleted: - emit messageEvent(MessageDeleted, events.mailboxId, events.folderId, - events.objectIds); + case EDeleted: { + emit messageEvent(MessageDeleted, event.mailboxId, event.folderId, + event.objectIds); + } break; default: break; @@ -171,6 +138,7 @@ break; } } + events.clear(); } } //End of EmailClientApi