diff -r 000000000000 -r f979ecb2b13e calendarui/organizerplugin/aiagendapluginengine/src/CalenEngine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/organizerplugin/aiagendapluginengine/src/CalenEngine.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,443 @@ +/* +* Copyright (c) 2002 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: This class is wrapper class of agenda engine. +* +*/ + + +//debug +#include "calendarui_debug.h" + +// INCLUDES +#include "CalenEngine.h" +#include "CalenAsyncCommands.h" +#include "CalEngineCallback.h" +#include "CleanupResetAndDestroy.h" + + +#include +#include +#include +#include + +enum TCalenEnginePanic + { + EMultipleCommands = 0 + }; + + + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +static void Panic(TInt aReason) + { + TRACE_ENTRY_POINT; + + _LIT(KPanicCategory, "CalenEngine"); + User::Panic(KPanicCategory, aReason); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +CCalenEngine::CCalenEngine() + { + TRACE_ENTRY_POINT; + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +CCalenEngine* CCalenEngine::NewL() + { + TRACE_ENTRY_POINT; + + CCalenEngine* self = new (ELeave) CCalenEngine; + //CleanupStack::PushL(self); + //self->ConstructL(); + //CleanupStack::Pop(self); + + TRACE_EXIT_POINT; + return self; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +CCalenEngine::~CCalenEngine() + { + TRACE_ENTRY_POINT; + + Close(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::Close() + { + TRACE_ENTRY_POINT; + + if( iCommand ) + { + // cancel all asynchronous operations before(!) deleting the object! + iCommand->Cancel(); + delete iCommand; + iCommand = NULL; + } + ReleaseCalendarDatabase(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenEngine::GetActiveSessionsL +// ----------------------------------------------------------------------------- +// +RPointerArray& CCalenEngine::GetActiveSessionsL() + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + return iSessionReferanceArray; + } + +// ----------------------------------------------------------------------------- +// CCalenEngine::UpdateCalSessionsL +// ----------------------------------------------------------------------------- +// +void CCalenEngine::UpdateCalSessionsL() + { + TRACE_ENTRY_POINT; + + Reset(); + + GetAllCalendarInfoL(); + + CCalSession* defaultSession = CCalSession::NewL(); //Default session + iSessionOwningArray.AppendL(defaultSession); + + CCalSession* tempSession = NULL; //Temp session + for (TInt index = 0; index < iCalInfoArray.Count(); index++) + { + TPtrC calFileName = iCalInfoArray[index].iFileName; + + RDebug::Print(calFileName); + if (!calFileName.CompareF(defaultSession->DefaultFileNameL())) + { + CleanupStack::PushL(defaultSession); + defaultSession->OpenL(calFileName); + CleanupStack::Pop(defaultSession); + + tempSession = defaultSession; + iCalInfoArray[index].iColltectionId + = tempSession->CollectionIdL(); + } + else + { + tempSession = CCalSession::NewL(*defaultSession); + CleanupStack::PushL(tempSession); + tempSession->OpenL(calFileName); + CleanupStack::Pop(tempSession); + iCalInfoArray[index].iColltectionId + = tempSession->CollectionIdL(); + + iSessionOwningArray.AppendL(tempSession); + } + iSessionReferanceArray.AppendL(tempSession); + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenEngine::GetAllCalendarsL +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetAllCalendarInfoL( ) + { + TRACE_ENTRY_POINT + CCalSession* sessionIter = CCalSession::NewL(); + CleanupStack::PushL(sessionIter); + CCalCalendarIterator* calIter = CCalCalendarIterator::NewL(*sessionIter); + CleanupStack::PushL(calIter); + + for(CCalCalendarInfo* calendarInfo = calIter->FirstL() ; + calendarInfo != NULL ; calendarInfo = calIter->NextL() ) + { + if(calendarInfo->Enabled()) + { + TCalInfo calInfo; + calInfo.iFileName = calendarInfo->FileNameL(); + calInfo.iColor = calendarInfo->Color().Value(); + iCalInfoArray.AppendL(calInfo); + } + delete calendarInfo; + } + + CleanupStack::PopAndDestroy(calIter); + CleanupStack::PopAndDestroy(sessionIter); + TRACE_EXIT_POINT + } + +// ----------------------------------------------------------------------------- +// CCalenEngine::Reset +// ----------------------------------------------------------------------------- +// +void CCalenEngine::Reset() + { + TRACE_ENTRY_POINT + if(iCalInfoArray.Count()) + { + iCalInfoArray.Reset(); + } + + if (iSessionReferanceArray.Count()) + { + iSessionReferanceArray.Reset(); + } + + if (iSessionOwningArray.Count()) + { + iSessionOwningArray.ResetAndDestroy(); + } + TRACE_EXIT_POINT + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::StartCommand( CMultistepCommandBase* aCommand, + MCalenEngineGeneralCallback& aCallback ) + { + TRACE_ENTRY_POINT; + + __ASSERT_ALWAYS(iCommand == NULL, Panic(EMultipleCommands)); + iCallback = &aCallback; + iCommand = aCommand; + iCommand->Start(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::FinishCommand() + { + TRACE_ENTRY_POINT; + + __ASSERT_ALWAYS(iCommand != NULL, User::Invariant()); + delete iCommand; + iCommand = NULL; + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::OpenDatabaseL(MCalenEngineOpenCallback& aCallback) + { + TRACE_ENTRY_POINT; + + StartCommand(new (ELeave) COpenCommand(*this), aCallback); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::OpenCompleted() + { + TRACE_ENTRY_POINT; + + FinishCommand(); + static_cast(iCallback)->OpenDatabaseCompleted(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetEntriesForDayL( MCalenEngineEntryFetchCallback& aCallback, + const TTime& aDay, + RPointerArray& aInstanceArray ) + { + TRACE_ENTRY_POINT; + + StartCommand( + CGetEntriesCommand::NewL( *this, aDay, aInstanceArray ), + aCallback ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetEventForNextSevenDaysL( MCalenEngineEntryFetchCallback& aCallback, + const TTime& aStartDay, const TInt aDaysToSearch, + RPointerArray& aInstanceArray ) + { + TRACE_ENTRY_POINT; + + StartCommand( + CGetNextEventCommand::NewL( *this, aStartDay, aDaysToSearch, aInstanceArray ), + aCallback ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetTodosL( MCalenEngineEntryFetchCallback& aCallback, + RPointerArray& aInstanceArray ) + { + TRACE_ENTRY_POINT; + + StartCommand( + CGetTodosCommand::NewL( *this, aInstanceArray ), + aCallback ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetCalendarDataL( MCalenEngineEntryFetchCallback& aCallback, + RPointerArray& aInstanceArray, + const TTime& aStartDay, + const TInt aDaysToSearch ) + { + TRACE_ENTRY_POINT; + + StartCommand( + CGetEntriesForDaysCommand::NewL( *this, aInstanceArray, aStartDay, aDaysToSearch ), + aCallback ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetEntriesCompleted() + { + TRACE_ENTRY_POINT; + + FinishCommand(); + static_cast(iCallback)->GetEntriesCompleted(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetTodosCompleted() + { + TRACE_ENTRY_POINT; + + FinishCommand(); + static_cast(iCallback)->GetTodosCompleted(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetFutureEventCompleted(void) + { + TRACE_ENTRY_POINT; + + FinishCommand(); + static_cast(iCallback)->GetFutureEventCompleted(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::GetCalendarDataCompleted(void) + { + TRACE_ENTRY_POINT; + + FinishCommand(); + static_cast(iCallback)->GetCalendarDataCompleted(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::HandleError(TInt aError) + { + TRACE_ENTRY_POINT; + + FinishCommand(); + static_cast(iCallback)->HandleError( aError ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?implementation_description +// ----------------------------------------------------------------------------- +// +void CCalenEngine::ReleaseCalendarDatabase() + { + TRACE_ENTRY_POINT; + + delete iInstanceView; + iInstanceView = NULL; + + Reset(); + + TRACE_EXIT_POINT; + } + + +// End of File