logsui/logsengine/logssymbianos/src/logsremove.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 09:49:12 +0300
changeset 14 f27aebe284bb
parent 0 4a5361db8937
child 15 76d2cf7a585e
permissions -rw-r--r--
Revision: 201027 Kit: 201033

/*
* Copyright (c) 2009 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"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

//USER
#include "logsremove.h"
#include "logsmodel.h"
#include "logslogger.h"
#include "logsremoveobserver.h"
#include "logsremovestates.h"
#include <logcli.h>
#include <f32file.h>
#include <logview.h>
//SYSTEM

// CONSTANTS

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
//
LogsRemove::LogsRemove( LogsRemoveObserver& observer, bool readingAllEvents )
: LogsWorker(readingAllEvents),
  mObserver(observer),
  mFsSession(0),
  mClearType(-1)
{
}

// -----------------------------------------------------------------------------
// LogsRemove::~LogsRemove
// -----------------------------------------------------------------------------
//
LogsRemove::~LogsRemove()
{
    LOGS_QDEBUG( "logs [ENG] -> LogsRemove::~LogsRemove()" )
    Cancel();
    delete mLogViewRecent;
    mLogViewRecent = 0;
    delete mDuplicatesView;
    mDuplicatesView = 0;
    delete mLogClient;
    mLogClient = 0;
    if ( mFsSession ){
        mFsSession->Close();
    }
    delete mFsSession;
    qDeleteAll( mRemoveStates );
    qDeleteAll( mClearAllStates );
    LOGS_QDEBUG( "logs [ENG] <- LogsRemove::~LogsRemove()" )
}

// ----------------------------------------------------------------------------
// LogsRemove::RunError
// ----------------------------------------------------------------------------
//
TInt LogsRemove::RunError(TInt aError)
{
	mObserver.logsRemoveErrorOccured(aError);
	return KErrNone;	
}


// ----------------------------------------------------------------------------
// LogsRemove::init
// ----------------------------------------------------------------------------
//
int LogsRemove::init()
{
    LOGS_QDEBUG( "logs [ENG] -> LogsRemove::init()" )    
    TRAPD( err, initL() );
    LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::init(), err:", err )    
    return err;
}


// ----------------------------------------------------------------------------
// LogsRemove::clearList
// ----------------------------------------------------------------------------
//
bool LogsRemove::clearList(LogsModel::ClearType cleartype)
{
    LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearList" )
  
    bool clearingStarted( false );
    TRAP_IGNORE( clearingStarted = clearListL(cleartype) )
    
    LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearList, started", clearingStarted )
    return clearingStarted;
}

// ----------------------------------------------------------------------------
// LogsRemove::clearListL
// ----------------------------------------------------------------------------
//
bool LogsRemove::clearListL(LogsModel::ClearType cleartype)
{
    LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearListL" )
  
    initializeClearAllL();
    
    mClearType = cleartype;
    
    bool clearingStarted = startClearingL();
    
    LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearListL, started", clearingStarted )
    return clearingStarted;
}

// ----------------------------------------------------------------------------
// LogsRemove::initL
// ----------------------------------------------------------------------------
//
void LogsRemove::initL()
{
    LOGS_QDEBUG( "logs [ENG] -> LogsRemove::initL" )
        
    __ASSERT_ALWAYS( !IsActive(), User::Leave( KErrInUse ) );
       
    if ( !mFsSession ){
        mFsSession = new (ELeave) RFs();
        User::LeaveIfError( mFsSession->Connect() );
    }
    
    if ( !mLogClient ){
        mLogClient = CLogClient::NewL( *mFsSession );
    }  
       
    LOGS_QDEBUG( "logs [ENG] <- LogsRemove::initL" )
}


// ----------------------------------------------------------------------------
// LogsRemove::clearEvents
// ----------------------------------------------------------------------------
//
int LogsRemove::clearEvents(const QList<int>& eventIds, bool& async)
{
    TRAPD( err, clearEventsL(eventIds, async) );
    return err;
}
    
// ----------------------------------------------------------------------------
// LogsRemove::clearEventsL
// ----------------------------------------------------------------------------
//
void LogsRemove::clearEventsL(const QList<int>& eventIds, bool& async)
{
    LOGS_QDEBUG( "logs [ENG] -> LogsRemove::clearEventsL()")
    
    async = false;
    initializeIdBasedRemovalL();
    
    mRemovedEvents = eventIds;
    mCurrentEventId = eventIds.isEmpty() ? -1 : eventIds.at(0);
    if ( !mRemovedEvents.isEmpty() ){
        async = startClearingL();
    }
  
    LOGS_QDEBUG_2( "logs [ENG] <- LogsRemove::clearEventsL(): async", async ) 
}

// ----------------------------------------------------------------------------
// LogsRemove::initializeClearAllL
// ----------------------------------------------------------------------------
//
void LogsRemove::initializeClearAllL()
{
    initL();
    
    if ( mClearAllStates.count() == 0 ){
        LogsRemoveStateClearAll* clearAll = new LogsRemoveStateClearAll(*this, *this);
        LogsRemoveStateDone* done = new LogsRemoveStateDone(*this, *this);
        clearAll->setNextState(*done);
        mClearAllStates.append(clearAll);
        mClearAllStates.append(done);
    }
    mCurrentStateMachine = &mClearAllStates;
    setCurrentState(*mClearAllStates.at(0));
}

// ----------------------------------------------------------------------------
// LogsRemove::initializeIdBasedRemovalL
// ----------------------------------------------------------------------------
//
void LogsRemove::initializeIdBasedRemovalL()
{
    initL();
    
    if ( !mLogViewRecent ){
        mLogViewRecent = CLogViewRecent::NewL( *mLogClient );
    }
    if ( !mDuplicatesView ) {
        mDuplicatesView = CLogViewDuplicate::NewL( *mLogClient ); 
    }
    
    if ( mRemoveStates.count() == 0 ){
        LogsRemoveStateInit* init = new LogsRemoveStateInit(*this, *this);
        LogsStateSearchingEvent* searchEvent = new LogsStateSearchingEvent(*this);
        LogsRemoveStateDeleteDuplicates* deleteDuplicates = 
            new LogsRemoveStateDeleteDuplicates(*this, *this);
        LogsRemoveStateDelete* deleteFromMain = new LogsRemoveStateDelete(*this, *this);
        LogsRemoveStateDone* done = new LogsRemoveStateDone(*this, *this);
        init->setNextState(*searchEvent);
        searchEvent->setNextState(*deleteDuplicates);
        deleteDuplicates->setNextState(*deleteFromMain);
        deleteFromMain->setNextState(*done);
        mRemoveStates.append(init);
        mRemoveStates.append(searchEvent);
        mRemoveStates.append(deleteDuplicates);
        mRemoveStates.append(deleteFromMain);
        mRemoveStates.append(done);
    }
    mCurrentStateMachine = &mRemoveStates;
    setCurrentState(*mRemoveStates.at(0));
}

// ----------------------------------------------------------------------------
// LogsRemove::startClearingL
// ----------------------------------------------------------------------------
//
bool LogsRemove::startClearingL()
{
    __ASSERT_ALWAYS( !IsActive(), User::Leave( KErrInUse ) );

    if ( currentState().enterL() ){
        SetActive();
        return true;
    }
    return false;
}

// ----------------------------------------------------------------------------
// LogsRemove::observer
// ----------------------------------------------------------------------------
//
LogsRemoveObserver& LogsRemove::observer()
{
    return mObserver;
}

// ----------------------------------------------------------------------------
// LogsRemove::removedEvents
// ----------------------------------------------------------------------------
//
QList<int>& LogsRemove::removedEvents()
{
    return mRemovedEvents;
}

// ----------------------------------------------------------------------------
// LogsRemove::clearType
// ----------------------------------------------------------------------------
//
int LogsRemove::clearType()
{
    return mClearType;
}


// End of file