diff -r 52d644758b05 -r 76d2cf7a585e logsui/logsengine/logssymbianos/src/logsremove.cpp --- a/logsui/logsengine/logssymbianos/src/logsremove.cpp Fri Aug 06 14:57:47 2010 +0300 +++ b/logsui/logsengine/logssymbianos/src/logsremove.cpp Mon Aug 23 18:14:51 2010 +0300 @@ -21,6 +21,7 @@ #include "logslogger.h" #include "logsremoveobserver.h" #include "logsremovestates.h" +#include "logsevent.h" #include #include #include @@ -138,6 +139,9 @@ if ( !mLogClient ){ mLogClient = CLogClient::NewL( *mFsSession ); } + + mRemovedEvents.clear(); + mRemovedEventDuplicates.clear(); LOGS_QDEBUG( "logs [ENG] <- LogsRemove::initL" ) } @@ -147,9 +151,9 @@ // LogsRemove::clearEvents // ---------------------------------------------------------------------------- // -int LogsRemove::clearEvents(const QList& eventIds, bool& async) +int LogsRemove::clearEvents(const QList& events, bool& async) { - TRAPD( err, clearEventsL(eventIds, async) ); + TRAPD( err, clearEventsL(events, async) ); return err; } @@ -157,15 +161,20 @@ // LogsRemove::clearEventsL // ---------------------------------------------------------------------------- // -void LogsRemove::clearEventsL(const QList& eventIds, bool& async) +void LogsRemove::clearEventsL(const QList& events, bool& async) { LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearEventsL()") async = false; initializeIdBasedRemovalL(); - mRemovedEvents = eventIds; - mCurrentEventId = eventIds.isEmpty() ? -1 : eventIds.at(0); + foreach ( LogsEvent* event, events ){ + mRemovedEvents.append( *event ); + for ( int i = 0; i < event->mergedDuplicates().count(); i++ ){ + mRemovedEventDuplicates.append( event->mergedDuplicates().at(i) ); + } + } + mCurrentEventId = mRemovedEvents.isEmpty() ? 0 : mRemovedEvents.at(0).logId(); if ( !mRemovedEvents.isEmpty() ){ async = startClearingL(); } @@ -249,14 +258,14 @@ // LogsRemoveObserver& LogsRemove::observer() { - return mObserver; + return *this; } // ---------------------------------------------------------------------------- // LogsRemove::removedEvents // ---------------------------------------------------------------------------- // -QList& LogsRemove::removedEvents() +QList& LogsRemove::removedEvents() { return mRemovedEvents; } @@ -270,6 +279,57 @@ return mClearType; } +// ---------------------------------------------------------------------------- +// Don't forward completion yet if there is associated duplicate events which +// need to be still deleted. +// ---------------------------------------------------------------------------- +// +void LogsRemove::removeCompleted() +{ + LOGS_QDEBUG( "logs [ENG] -> LogsRemove::removeCompleted()") + + if ( !mRemovedEventDuplicates.isEmpty() ){ + TRAPD( err, removeAssociatedDuplicatesL() ); + if ( err ){ + mObserver.logsRemoveErrorOccured(err); + } + } + else { + mObserver.removeCompleted(); + } + + LOGS_QDEBUG( "logs [ENG] <- LogsRemove::removeCompleted()") +} + +// ---------------------------------------------------------------------------- +// LogsRemove::logsRemoveErrorOccured +// ---------------------------------------------------------------------------- +// +void LogsRemove::logsRemoveErrorOccured(int err) +{ + LOGS_QDEBUG( "logs [ENG] -> LogsRemove::logsRemoveErrorOccured()") + + mObserver.logsRemoveErrorOccured(err); + + LOGS_QDEBUG( "logs [ENG] <- LogsRemove::logsRemoveErrorOccured()") +} + +// ---------------------------------------------------------------------------- +// LogsRemove::removeAssociatedDuplicatesL +// ---------------------------------------------------------------------------- +// +void LogsRemove::removeAssociatedDuplicatesL() +{ + __ASSERT_ALWAYS( !mRemovedEventDuplicates.isEmpty(), User::Leave( KErrNotFound ) ); + + LogsEvent event = mRemovedEventDuplicates.takeFirst(); + mRemovedEvents.clear(); + mRemovedEvents.append(event); + mCurrentEventId = mRemovedEvents.at(0).logId(); + mCurrentStateMachine = &mRemoveStates; + setCurrentState(*mRemoveStates.at(0)); + startClearingL(); +} // End of file