--- /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 <calinstanceview.h>
+#include <calsession.h>
+#include <calcalendarinfo.h>
+#include <calcalendariterator.h>
+
+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<CCalSession>& 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<MCalenEngineOpenCallback*>(iCallback)->OpenDatabaseCompleted();
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::GetEntriesForDayL( MCalenEngineEntryFetchCallback& aCallback,
+ const TTime& aDay,
+ RPointerArray<CCalInstance>& 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<CCalInstance>& aInstanceArray )
+ {
+ TRACE_ENTRY_POINT;
+
+ StartCommand(
+ CGetNextEventCommand::NewL( *this, aStartDay, aDaysToSearch, aInstanceArray ),
+ aCallback );
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::GetTodosL( MCalenEngineEntryFetchCallback& aCallback,
+ RPointerArray<CCalInstance>& aInstanceArray )
+ {
+ TRACE_ENTRY_POINT;
+
+ StartCommand(
+ CGetTodosCommand::NewL( *this, aInstanceArray ),
+ aCallback );
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::GetCalendarDataL( MCalenEngineEntryFetchCallback& aCallback,
+ RPointerArray<CCalInstance>& 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<MCalenEngineEntryFetchCallback*>(iCallback)->GetEntriesCompleted();
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::GetTodosCompleted()
+ {
+ TRACE_ENTRY_POINT;
+
+ FinishCommand();
+ static_cast<MCalenEngineEntryFetchCallback*>(iCallback)->GetTodosCompleted();
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::GetFutureEventCompleted(void)
+ {
+ TRACE_ENTRY_POINT;
+
+ FinishCommand();
+ static_cast<MCalenEngineEntryFetchCallback*>(iCallback)->GetFutureEventCompleted();
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::GetCalendarDataCompleted(void)
+ {
+ TRACE_ENTRY_POINT;
+
+ FinishCommand();
+ static_cast<MCalenEngineEntryFetchCallback*>(iCallback)->GetCalendarDataCompleted();
+
+ TRACE_EXIT_POINT;
+ }
+
+// -----------------------------------------------------------------------------
+// ?implementation_description
+// -----------------------------------------------------------------------------
+//
+void CCalenEngine::HandleError(TInt aError)
+ {
+ TRACE_ENTRY_POINT;
+
+ FinishCommand();
+ static_cast<MCalenEngineGeneralCallback*>(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