logsui/logsengine/logssymbianos/src/logsremove.cpp
changeset 14 f27aebe284bb
parent 0 4a5361db8937
child 15 76d2cf7a585e
equal deleted inserted replaced
11:64a47b97e1e1 14:f27aebe284bb
    18 //USER
    18 //USER
    19 #include "logsremove.h"
    19 #include "logsremove.h"
    20 #include "logsmodel.h"
    20 #include "logsmodel.h"
    21 #include "logslogger.h"
    21 #include "logslogger.h"
    22 #include "logsremoveobserver.h"
    22 #include "logsremoveobserver.h"
       
    23 #include "logsremovestates.h"
    23 #include <logcli.h>
    24 #include <logcli.h>
    24 #include <f32file.h>
    25 #include <f32file.h>
    25 #include <logview.h>
    26 #include <logview.h>
    26 //SYSTEM
    27 //SYSTEM
    27 
    28 
    28 // CONSTANTS
    29 // CONSTANTS
    29 _LIT( KMaxLogsTime, "99991130:235959.999999");
       
    30 
    30 
    31 // -----------------------------------------------------------------------------
    31 // -----------------------------------------------------------------------------
    32 //
    32 //
    33 // -----------------------------------------------------------------------------
    33 // -----------------------------------------------------------------------------
    34 //
    34 //
    35 LogsRemove::LogsRemove( LogsRemoveObserver& observer, bool readingAllEvents )
    35 LogsRemove::LogsRemove( LogsRemoveObserver& observer, bool readingAllEvents )
    36 : CActive(EPriorityStandard),
    36 : LogsWorker(readingAllEvents),
    37   mObserver(observer),
    37   mObserver(observer),
    38   mReadingAllEvents(readingAllEvents),
    38   mFsSession(0),
    39   mLogClient(0),
    39   mClearType(-1)
    40   mRecentView(0)
    40 {
    41 {
       
    42 	CActiveScheduler::Add( this );
       
    43     mFsSession = new RFs();
       
    44 }
    41 }
    45 
    42 
    46 // -----------------------------------------------------------------------------
    43 // -----------------------------------------------------------------------------
    47 // LogsRemove::~LogsRemove
    44 // LogsRemove::~LogsRemove
    48 // -----------------------------------------------------------------------------
    45 // -----------------------------------------------------------------------------
    49 //
    46 //
    50 LogsRemove::~LogsRemove()
    47 LogsRemove::~LogsRemove()
    51 {
    48 {
    52     LOGS_QDEBUG( "logs [ENG] <-> LogsRemove::~LogsRemove()" )
    49     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::~LogsRemove()" )
    53     Cancel();
    50     Cancel();
    54     delete mRecentView;
    51     delete mLogViewRecent;
       
    52     mLogViewRecent = 0;
       
    53     delete mDuplicatesView;
       
    54     mDuplicatesView = 0;
    55     delete mLogClient;
    55     delete mLogClient;
       
    56     mLogClient = 0;
    56     if ( mFsSession ){
    57     if ( mFsSession ){
    57         mFsSession->Close();
    58         mFsSession->Close();
    58     }
    59     }
    59     delete mFsSession;
    60     delete mFsSession;
    60 }
    61     qDeleteAll( mRemoveStates );
    61 
    62     qDeleteAll( mClearAllStates );
    62 // ----------------------------------------------------------------------------
    63     LOGS_QDEBUG( "logs [ENG] <- LogsRemove::~LogsRemove()" )
    63 // LogsRemove::RunL
       
    64 // ----------------------------------------------------------------------------
       
    65 //
       
    66 void LogsRemove::RunL()
       
    67 {
       
    68     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::RunL()->" )
       
    69    if (iStatus.Int() == KErrNone){
       
    70     	LOGS_QDEBUG( "logs [ENG] -> LogsRemove::RunL() KErrNone" )
       
    71     	if ( !DeleteNextEvent() ){
       
    72             mObserver.removeCompleted();
       
    73     	}
       
    74     }
       
    75     else {
       
    76     	User::Leave( iStatus.Int() );
       
    77     	LOGS_QDEBUG( "logs [ENG] -> LogsRemove::RunL() !KErrNone" )
       
    78     }
       
    79     LOGS_QDEBUG( "logs [ENG] <- LogsRemove::RunL()<-" )
       
    80 }
       
    81 
       
    82 // ----------------------------------------------------------------------------
       
    83 // LogsRemove::DoCancel
       
    84 // ----------------------------------------------------------------------------
       
    85 //
       
    86 void LogsRemove::DoCancel()
       
    87 {
       
    88 	if ( mLogClient ){
       
    89         mLogClient->Cancel();
       
    90     }
       
    91 }
    64 }
    92 
    65 
    93 // ----------------------------------------------------------------------------
    66 // ----------------------------------------------------------------------------
    94 // LogsRemove::RunError
    67 // LogsRemove::RunError
    95 // ----------------------------------------------------------------------------
    68 // ----------------------------------------------------------------------------
   118 // LogsRemove::clearList
    91 // LogsRemove::clearList
   119 // ----------------------------------------------------------------------------
    92 // ----------------------------------------------------------------------------
   120 //
    93 //
   121 bool LogsRemove::clearList(LogsModel::ClearType cleartype)
    94 bool LogsRemove::clearList(LogsModel::ClearType cleartype)
   122 {
    95 {
   123     LOGS_QDEBUG( "logs [ENG] <- LogsRemove::clearList->" )
    96     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearList" )
   124     if ( init() != KErrNone ) {
    97   
   125         return false;
    98     bool clearingStarted( false );
   126     }
    99     TRAP_IGNORE( clearingStarted = clearListL(cleartype) )
   127     bool clearingStarted(false);
   100     
   128     TTime time( KMaxLogsTime );
       
   129     if ( !IsActive() ){
       
   130         if (cleartype == LogsModel::TypeLogsClearAll){
       
   131             mLogClient->ClearLog( time, iStatus );
       
   132         }
       
   133         else{
       
   134             mLogClient->ClearLog( cleartype, iStatus );
       
   135         }
       
   136         SetActive();  
       
   137         clearingStarted = true;
       
   138     } else {
       
   139     }
       
   140     LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearList, started", clearingStarted )
   101     LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearList, started", clearingStarted )
   141     return clearingStarted;
   102     return clearingStarted;
   142 }
   103 }
   143 
   104 
   144 // ----------------------------------------------------------------------------
   105 // ----------------------------------------------------------------------------
       
   106 // LogsRemove::clearListL
       
   107 // ----------------------------------------------------------------------------
       
   108 //
       
   109 bool LogsRemove::clearListL(LogsModel::ClearType cleartype)
       
   110 {
       
   111     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearListL" )
       
   112   
       
   113     initializeClearAllL();
       
   114     
       
   115     mClearType = cleartype;
       
   116     
       
   117     bool clearingStarted = startClearingL();
       
   118     
       
   119     LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearListL, started", clearingStarted )
       
   120     return clearingStarted;
       
   121 }
       
   122 
       
   123 // ----------------------------------------------------------------------------
   145 // LogsRemove::initL
   124 // LogsRemove::initL
   146 // ----------------------------------------------------------------------------
   125 // ----------------------------------------------------------------------------
   147 //
   126 //
   148 void LogsRemove::initL()
   127 void LogsRemove::initL()
   149 {
   128 {
   150     if ( mLogClient ){
   129     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::initL" )
   151         // Already initialized
   130         
   152         return;
   131     __ASSERT_ALWAYS( !IsActive(), User::Leave( KErrInUse ) );
       
   132        
       
   133     if ( !mFsSession ){
       
   134         mFsSession = new (ELeave) RFs();
       
   135         User::LeaveIfError( mFsSession->Connect() );
       
   136     }
       
   137     
       
   138     if ( !mLogClient ){
       
   139         mLogClient = CLogClient::NewL( *mFsSession );
   153     }  
   140     }  
   154     User::LeaveIfError( mFsSession->Connect() );
   141        
   155     mLogClient = CLogClient::NewL( *mFsSession );
   142     LOGS_QDEBUG( "logs [ENG] <- LogsRemove::initL" )
   156 }
   143 }
   157 
   144 
   158 
   145 
   159 // ----------------------------------------------------------------------------
   146 // ----------------------------------------------------------------------------
   160 // LogsRemove::clearEvents
   147 // LogsRemove::clearEvents
   170 // LogsRemove::clearEventsL
   157 // LogsRemove::clearEventsL
   171 // ----------------------------------------------------------------------------
   158 // ----------------------------------------------------------------------------
   172 //
   159 //
   173 void LogsRemove::clearEventsL(const QList<int>& eventIds, bool& async)
   160 void LogsRemove::clearEventsL(const QList<int>& eventIds, bool& async)
   174 {
   161 {
   175     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearEventL()")
   162     LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearEventsL()")
   176 
   163     
   177     async = false;
   164     async = false;
   178     
   165     initializeIdBasedRemovalL();
       
   166     
       
   167     mRemovedEvents = eventIds;
       
   168     mCurrentEventId = eventIds.isEmpty() ? -1 : eventIds.at(0);
       
   169     if ( !mRemovedEvents.isEmpty() ){
       
   170         async = startClearingL();
       
   171     }
       
   172   
       
   173     LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearEventsL(): async", async ) 
       
   174 }
       
   175 
       
   176 // ----------------------------------------------------------------------------
       
   177 // LogsRemove::initializeClearAllL
       
   178 // ----------------------------------------------------------------------------
       
   179 //
       
   180 void LogsRemove::initializeClearAllL()
       
   181 {
   179     initL();
   182     initL();
   180     
   183     
   181     if ( mReadingAllEvents ){
   184     if ( mClearAllStates.count() == 0 ){
   182         // When all events are read, recent view cannot be used for 
   185         LogsRemoveStateClearAll* clearAll = new LogsRemoveStateClearAll(*this, *this);
   183         // event removal.
   186         LogsRemoveStateDone* done = new LogsRemoveStateDone(*this, *this);
   184         Cancel();
   187         clearAll->setNextState(*done);
   185         mRemovedEvents = eventIds;
   188         mClearAllStates.append(clearAll);
   186         async = DeleteNextEvent();
   189         mClearAllStates.append(done);
   187     } else {
   190     }
   188         if ( !mRecentView ) {
   191     mCurrentStateMachine = &mClearAllStates;
   189             mRecentView = CLogViewRecent::NewL( *mLogClient );
   192     setCurrentState(*mClearAllStates.at(0));
   190         }
   193 }
   191         foreach( int currId, eventIds ){
   194 
   192             LOGS_QDEBUG_2( "logs [ENG]  Removing, currid: ", currId )
   195 // ----------------------------------------------------------------------------
   193             mRecentView->RemoveL( currId );
   196 // LogsRemove::initializeIdBasedRemovalL
   194         }
   197 // ----------------------------------------------------------------------------
   195         delete mRecentView;
   198 //
   196         mRecentView = NULL;
   199 void LogsRemove::initializeIdBasedRemovalL()
   197     }
   200 {
   198     
   201     initL();
   199     LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearEventL(): async", async ) 
   202     
   200 }
   203     if ( !mLogViewRecent ){
   201 
   204         mLogViewRecent = CLogViewRecent::NewL( *mLogClient );
   202 // ----------------------------------------------------------------------------
   205     }
   203 // LogsRemove::DeleteNextEvent
   206     if ( !mDuplicatesView ) {
   204 // ----------------------------------------------------------------------------
   207         mDuplicatesView = CLogViewDuplicate::NewL( *mLogClient ); 
   205 //
   208     }
   206 bool LogsRemove::DeleteNextEvent()
   209     
   207 {
   210     if ( mRemoveStates.count() == 0 ){
   208     bool deleting(false);
   211         LogsRemoveStateInit* init = new LogsRemoveStateInit(*this, *this);
   209     if ( !mRemovedEvents.isEmpty() ){
   212         LogsStateSearchingEvent* searchEvent = new LogsStateSearchingEvent(*this);
   210         int currId = mRemovedEvents.takeFirst();
   213         LogsRemoveStateDeleteDuplicates* deleteDuplicates = 
   211         LOGS_QDEBUG_2( "logs [ENG]  LogsRemove::DeleteNextEvent, id: ", currId )
   214             new LogsRemoveStateDeleteDuplicates(*this, *this);
   212         mLogClient->DeleteEvent( currId, iStatus );
   215         LogsRemoveStateDelete* deleteFromMain = new LogsRemoveStateDelete(*this, *this);
       
   216         LogsRemoveStateDone* done = new LogsRemoveStateDone(*this, *this);
       
   217         init->setNextState(*searchEvent);
       
   218         searchEvent->setNextState(*deleteDuplicates);
       
   219         deleteDuplicates->setNextState(*deleteFromMain);
       
   220         deleteFromMain->setNextState(*done);
       
   221         mRemoveStates.append(init);
       
   222         mRemoveStates.append(searchEvent);
       
   223         mRemoveStates.append(deleteDuplicates);
       
   224         mRemoveStates.append(deleteFromMain);
       
   225         mRemoveStates.append(done);
       
   226     }
       
   227     mCurrentStateMachine = &mRemoveStates;
       
   228     setCurrentState(*mRemoveStates.at(0));
       
   229 }
       
   230 
       
   231 // ----------------------------------------------------------------------------
       
   232 // LogsRemove::startClearingL
       
   233 // ----------------------------------------------------------------------------
       
   234 //
       
   235 bool LogsRemove::startClearingL()
       
   236 {
       
   237     __ASSERT_ALWAYS( !IsActive(), User::Leave( KErrInUse ) );
       
   238 
       
   239     if ( currentState().enterL() ){
   213         SetActive();
   240         SetActive();
   214         deleting = true;
   241         return true;
   215     }
   242     }
   216     return deleting;  
   243     return false;
   217 }
   244 }
       
   245 
       
   246 // ----------------------------------------------------------------------------
       
   247 // LogsRemove::observer
       
   248 // ----------------------------------------------------------------------------
       
   249 //
       
   250 LogsRemoveObserver& LogsRemove::observer()
       
   251 {
       
   252     return mObserver;
       
   253 }
       
   254 
       
   255 // ----------------------------------------------------------------------------
       
   256 // LogsRemove::removedEvents
       
   257 // ----------------------------------------------------------------------------
       
   258 //
       
   259 QList<int>& LogsRemove::removedEvents()
       
   260 {
       
   261     return mRemovedEvents;
       
   262 }
       
   263 
       
   264 // ----------------------------------------------------------------------------
       
   265 // LogsRemove::clearType
       
   266 // ----------------------------------------------------------------------------
       
   267 //
       
   268 int LogsRemove::clearType()
       
   269 {
       
   270     return mClearType;
       
   271 }
       
   272 
   218 
   273 
   219 // End of file
   274 // End of file
   220 
   275