diff -r 000000000000 -r d6fe6244b863 creator/src/creator_log.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creator/src/creator_log.cpp Tue Feb 02 00:17:27 2010 +0200 @@ -0,0 +1,436 @@ +/* +* Copyright (c) 2008 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: +* +*/ + + +#include + +#include "creator_log.h" +#include "creator_traces.h" + +static const TInt KLogsFieldLength = 256; + +//_LIT(KCreatorLogsPrefixName, "CR_"); + +//---------------------------------------------------------------------------- + +CLogsParameters::CLogsParameters() + { + LOGSTRING("Creator: CLogsParameters::CLogsParameters"); + + iPhoneNumber = HBufC::New(KLogsFieldLength); + /*iMissedCallPhoneNumber = HBufC::New(KLogsFieldLength); + iReceivedCallPhoneNumber = HBufC::New(KLogsFieldLength); + iDialledNumberPhoneNumber = HBufC::New(KLogsFieldLength);*/ + } + +CLogsParameters::~CLogsParameters() + { + LOGSTRING("Creator: CLogsParameters::~CLogsParameters"); + + delete iPhoneNumber; + /*delete iDialledNumberPhoneNumber; + delete iReceivedCallPhoneNumber; + delete iMissedCallPhoneNumber;*/ + } + +//---------------------------------------------------------------------------- + +CCreatorLogs* CCreatorLogs::NewL(CCreatorEngine* aEngine) + { + CCreatorLogs* self = CCreatorLogs::NewLC(aEngine); + CleanupStack::Pop(self); + return self; + } + +CCreatorLogs* CCreatorLogs::NewLC(CCreatorEngine* aEngine) + { + CCreatorLogs* self = new (ELeave) CCreatorLogs; + CleanupStack::PushL(self); + self->ConstructL(aEngine); + return self; + } + +CCreatorLogs::CCreatorLogs() : CActive(0) + { + } + +void CCreatorLogs::ConstructL(CCreatorEngine* aEngine) + { + LOGSTRING("Creator: CCreatorLogs::ConstructL"); + + iEngine = aEngine; + + iLogClient = CLogClient::NewL(CEikonEnv::Static()->FsSession()); + iLogEvent = CLogEvent::NewL(); + + CActiveScheduler::Add(this); // needed by CActive + } + +CCreatorLogs::~CCreatorLogs() + { + LOGSTRING("Creator: CCreatorLogs::~CCreatorLogs"); + + Cancel(); //from CActive + + if ( iEngine && iEntryIds.Count() ) + { + TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidLogs ) ); + } + iEntryIds.Reset(); + iEntryIds.Close(); + + delete iLogEvent; + delete iLogClient; + + if (iParameters) + delete iParameters; + } + +//---------------------------------------------------------------------------- + +TBool CCreatorLogs::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries) + { + LOGSTRING("Creator: CCreatorLogs::AskDataFromUserL"); + if ( aCommand == ECmdDeleteLogs ) + { + return iEngine->YesNoQueryDialogL( _L("Delete all log entries?") ); + } + else if ( aCommand == ECmdDeleteCreatorLogs ) + { + return iEngine->YesNoQueryDialogL( _L("Delete all log entries created with Creator?") ); + } + return iEngine->EntriesQueryDialogL( aNumberOfEntries, _L("How many entries to create?") ); + } + +//---------------------------------------------------------------------------- + +void CCreatorLogs::RunL() + { + LOGSTRING("Creator: CCreatorLogs::RunL"); + + // log writing finished, stop the async waiting + iLogWriteWait.AsyncStop(); + } + +//---------------------------------------------------------------------------- + +void CCreatorLogs::DoCancel() + { + } + +//---------------------------------------------------------------------------- + +TInt CCreatorLogs::CreateMissedCallEntryL(CLogsParameters *aParameters) + { + LOGSTRING("Creator: CCreatorLogs::CreateMissedCallEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CLogsParameters* parameters = aParameters; + + // random data needed if no predefined data available + if (!parameters) + { + iParameters = new(ELeave) CLogsParameters; + parameters = iParameters; + + /*iParameters->iMissedCallPhoneNumber->Des().Zero(); + iParameters->iMissedCallPhoneNumber->Des().AppendNum( iEngine->RandomNumber(1000000, 9999999) ); + + iParameters->iMissedCallEventTime.UniversalTime(); + iParameters->iMissedCallEventTime -= TTimeIntervalMinutes( iEngine->RandomNumber(12000) );*/ + parameters->iPhoneNumber->Des().Zero(); + parameters->iPhoneNumber->Des().AppendNum( iEngine->RandomNumber(1000000, 9999999) ); + + parameters->iEventTime.UniversalTime(); + parameters->iEventTime -= TTimeIntervalMinutes( iEngine->RandomNumber(12000) ); + + } + + // defaults + iLogEvent->SetId( KLogNullIdCreator ); + iLogEvent->SetEventType( KNullUid ); + iLogEvent->SetRemoteParty( KNullDesC ); + iLogEvent->SetDirection( KNullDesC ); + iLogEvent->SetTime( Time::NullTTime() ); + iLogEvent->SetDurationType( KLogNullDurationTypeCreator ); + iLogEvent->SetDuration( KLogNullDurationCreator ); + iLogEvent->SetStatus( KNullDesC ); + iLogEvent->SetSubject( KNullDesC ); + iLogEvent->SetNumber( KNullDesC ); + iLogEvent->SetContact( KNullContactId ); + iLogEvent->SetLink( KLogNullLinkCreator ); + iLogEvent->SetDescription( KNullDesC ); + iLogEvent->SetFlags( KLogNullFlags ); + iLogEvent->SetEventType(KLogCallEventTypeUid); + iLogEvent->SetSubject(_L("A")); + + // set direction + TLogString missed; + iLogClient->GetString(missed, R_LOG_DIR_MISSED); + iLogEvent->SetDirection(missed); + + // set duration + iLogEvent->SetDurationType( KLogDurationNoneCreator ); + TLogDuration duration = 0; + iLogEvent->SetDuration(duration); + + // set the phone number + //iLogEvent->SetNumber( iParameters->iMissedCallPhoneNumber->Des() ); + iLogEvent->SetNumber( parameters->iPhoneNumber->Des() ); + + // set event time + //iLogEvent->SetTime( iParameters->iMissedCallEventTime ); + iLogEvent->SetTime( parameters->iEventTime ); + + // start writing + __ASSERT_ALWAYS(!IsActive(), User::Panic(_L("LogWriter"), 150)); + iLogClient->AddEvent(*iLogEvent, iStatus); + SetActive(); + + // wait till adding has finished + iLogWriteWait.Start(); + + // id has been generated, store it for being able to delete + // entries created only with Creator + iEntryIds.Append( iLogEvent->Id() ); + + return iStatus.Int(); // should be KErrNone if writing was succesful + } + +//---------------------------------------------------------------------------- + +TInt CCreatorLogs::CreateReceivedCallEntryL(CLogsParameters *aParameters) + { + LOGSTRING("Creator: CCreatorLogs::CreateReceivedCallEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CLogsParameters* parameters = aParameters; + + // random data needed if no predefined data available + if (!parameters) + { + iParameters = new(ELeave) CLogsParameters; + parameters = iParameters; + + /*iParameters->iReceivedCallPhoneNumber->Des().Zero(); + iParameters->iReceivedCallPhoneNumber->Des().AppendNum( iEngine->RandomNumber(1000000, 9999999) ); + + iParameters->iReceivedCallEventTime.UniversalTime(); + iParameters->iReceivedCallEventTime -= TTimeIntervalMinutes( iEngine->RandomNumber(12000) ); + + iParameters->iReceivedCallDuration = iEngine->RandomNumber(7200);*/ + parameters->iPhoneNumber->Des().Zero(); + parameters->iPhoneNumber->Des().AppendNum( iEngine->RandomNumber(1000000, 9999999) ); + + parameters->iEventTime.UniversalTime(); + parameters->iEventTime -= TTimeIntervalMinutes( iEngine->RandomNumber(12000) ); + + parameters->iDuration = iEngine->RandomNumber(7200); + } + + // defaults + iLogEvent->SetId( KLogNullIdCreator ); + iLogEvent->SetEventType( KNullUid ); + iLogEvent->SetRemoteParty( KNullDesC ); + iLogEvent->SetDirection( KNullDesC ); + iLogEvent->SetTime( Time::NullTTime() ); + iLogEvent->SetDurationType( KLogNullDurationTypeCreator ); + iLogEvent->SetDuration( KLogNullDurationCreator ); + iLogEvent->SetStatus( KNullDesC ); + iLogEvent->SetSubject( KNullDesC ); + iLogEvent->SetNumber( KNullDesC ); + iLogEvent->SetContact( KNullContactId ); + iLogEvent->SetLink( KLogNullLinkCreator ); + iLogEvent->SetDescription( KNullDesC ); + iLogEvent->SetFlags( KLogNullFlags ); + iLogEvent->SetEventType(KLogCallEventTypeUid); + iLogEvent->SetSubject(_L("A")); + + // set direction + TLogString incoming; + iLogClient->GetString(incoming, R_LOG_DIR_IN); + iLogEvent->SetDirection(incoming); + + // set duration + iLogEvent->SetDurationType( KLogDurationValidCreator ); + //iLogEvent->SetDuration( iParameters->iReceivedCallDuration ); + iLogEvent->SetDuration( parameters->iDuration ); + + // set the phone number + //iLogEvent->SetNumber( iParameters->iReceivedCallPhoneNumber->Des() ); + iLogEvent->SetNumber( parameters->iPhoneNumber->Des() ); + + // set event time + //iLogEvent->SetTime( iParameters->iReceivedCallEventTime ); + iLogEvent->SetTime( parameters->iEventTime ); + + // start writing + __ASSERT_ALWAYS(!IsActive(), User::Panic(_L("LogWriter"), 151)); + iLogClient->AddEvent(*iLogEvent, iStatus); + SetActive(); + + // wait till adding has finished + iLogWriteWait.Start(); + + // id has been generated, store it for being able to delete + // entries created only with Creator + iEntryIds.Append( iLogEvent->Id() ); + + return iStatus.Int(); // should be KErrNone if writing was succesful + } + +//---------------------------------------------------------------------------- + + +TInt CCreatorLogs::CreateDialledNumberEntryL(CLogsParameters *aParameters) + { + LOGSTRING("Creator: CCreatorLogs::CreateDialledNumberEntryL"); + + // clear any existing parameter definations + delete iParameters; + iParameters = NULL; + + CLogsParameters* parameters = aParameters; + + // random data needed if no predefined data available + if (!parameters) + { + iParameters = new(ELeave) CLogsParameters; + parameters = iParameters; + + /*iParameters->iDialledNumberPhoneNumber->Des().Zero(); + iParameters->iDialledNumberPhoneNumber->Des().AppendNum( iEngine->RandomNumber(1000000, 9999999) ); + + iParameters->iDialledNumberEventTime.UniversalTime(); + iParameters->iDialledNumberEventTime -= TTimeIntervalMinutes( iEngine->RandomNumber(12000) ); + + iParameters->iDialledNumberDuration = iEngine->RandomNumber(7200);*/ + parameters->iPhoneNumber->Des().Zero(); + parameters->iPhoneNumber->Des().AppendNum( iEngine->RandomNumber(1000000, 9999999) ); + + parameters->iEventTime.UniversalTime(); + parameters->iEventTime -= TTimeIntervalMinutes( iEngine->RandomNumber(12000) ); + + parameters->iDuration = iEngine->RandomNumber(7200); + + } + + // defaults + iLogEvent->SetId( KLogNullIdCreator ); + iLogEvent->SetEventType( KNullUid ); + iLogEvent->SetRemoteParty( KNullDesC ); + iLogEvent->SetDirection( KNullDesC ); + iLogEvent->SetTime( Time::NullTTime() ); + iLogEvent->SetDurationType( KLogNullDurationTypeCreator ); + iLogEvent->SetDuration( KLogNullDurationCreator ); + iLogEvent->SetStatus( KNullDesC ); + iLogEvent->SetSubject( KNullDesC ); + iLogEvent->SetNumber( KNullDesC ); + iLogEvent->SetContact( KNullContactId ); + iLogEvent->SetLink( KLogNullLinkCreator ); + iLogEvent->SetDescription( KNullDesC ); + iLogEvent->SetFlags( KLogNullFlags ); + iLogEvent->SetEventType(KLogCallEventTypeUid); + iLogEvent->SetSubject(_L("A")); + + // set direction + TLogString outgoing; + iLogClient->GetString(outgoing, R_LOG_DIR_OUT); + iLogEvent->SetDirection(outgoing); + + // set duration + iLogEvent->SetDurationType( KLogDurationValidCreator ); + //iLogEvent->SetDuration( iParameters->iDialledNumberDuration ); + iLogEvent->SetDuration( parameters->iDuration ); + + // set the phone number + //iLogEvent->SetNumber( iParameters->iDialledNumberPhoneNumber->Des() ); + iLogEvent->SetNumber( parameters->iPhoneNumber->Des() ); + + // set event time + //iLogEvent->SetTime( iParameters->iDialledNumberEventTime ); + iLogEvent->SetTime( parameters->iEventTime ); + + // start writing + __ASSERT_ALWAYS(!IsActive(), User::Panic(_L("LogWriter"), 152)); + iLogClient->AddEvent(*iLogEvent, iStatus); + SetActive(); + + // wait till adding has finished + iLogWriteWait.Start(); + + // id has been generated, store it for being able to delete + // only entries created with Creator + iEntryIds.Append( iLogEvent->Id() ); + + return iStatus.Int(); // should be KErrNone if writing was succesful + } + +//---------------------------------------------------------------------------- +void CCreatorLogs::DeleteAllL() + { + LOGSTRING("Creator: CCreatorLogs::DeleteAllL"); + iLogClient->ClearLog( TTime( Time::MaxTTime() ), iStatus ); + SetActive(); + + // wait till delete has finished + iLogWriteWait.Start(); + User::LeaveIfError( iStatus.Int() ); + + // reset must be done here, because iEntryIds is stored in destructor + iEntryIds.Reset(); + + // all entries deleted, remove the Logs related registry + iEngine->RemoveStoreL( KUidDictionaryUidLogs ); + } + +//---------------------------------------------------------------------------- +void CCreatorLogs::DeleteAllCreatedByCreatorL() + { + LOGSTRING("Creator: CCreatorLogs::DeleteAllCreatedByCreatorL"); + iEntryIds.Reset(); + + // fetch ids of entries created by Creator + iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidLogs ); + + // delete entries + for ( TInt i = 0; i < iEntryIds.Count(); i++ ) + { + // This could be implemented with while loop + // with additional cancel flag. That would enable + // using CancelOp() and cancelling would be bit smoother. + // With this for loop implementation all entries will be + // deleted whether or not user cancels during logs operation. + + iLogClient->DeleteEvent( iEntryIds[i], iStatus ); + SetActive(); + // wait till delete has finished + iLogWriteWait.Start(); + } + + // reset must be done here, because iEntryIds is stored in destructor + iEntryIds.Reset(); + + // all entries deleted, remove the Logs related registry + iEngine->RemoveStoreL( KUidDictionaryUidLogs ); + }