--- a/calendarui/globaldata/src/calenglobaldata.cpp Tue Feb 02 10:12:19 2010 +0200
+++ b/calendarui/globaldata/src/calenglobaldata.cpp Fri Apr 16 14:57:40 2010 +0300
@@ -11,48 +11,26 @@
*
* Contributors:
*
-* Description: Global Data for Calendar application
+* Description: Global Data for Calendar application
*
*/
-
//debug
#include "calendarui_debug.h"
// INCLUDE FILES
-#include "calenglobaldata.h" // CCalenGlobalData
-#include "RImplInfoPtrArrayOwn.inl" // Wrapper class with array deletion on close
-#include "calensend.h" // CCalenSend
-#include "CalenInterimUtils2.h" // CalenInterimUtils
+#include "calenglobaldata.h" // CalenGlobalData
+#include "calencontext.h" // Calendar context
#include "calencontextimpl.h" // Calendar context implementation
-#include "calenfilemapping.h"
-
-#include <Calendar.rsg> // Calendar resources
-#include <cmrmailboxutils.h> // CMRMailboxUtils
-#include <utf.h> // CnvUtfConverter
-#include <StringLoader.h> // Loads strings from resource files
-#include <featmgr.h> // Feature discovery API
-#include <calsession.h> // Calendar database session
+#include "hb_calencommands.hrh"
+#include <CalSession.h> // Calendar database session
#include <calinstanceview.h> // Calendar Instance view
#include <calentryview.h> // Calendar Entry view
-#include <cmrmailboxutils.h> // CMRMailboxUtils
-#include <calencommands.hrh> // Calendar commands
-#include <aknlists.h>
-#include <aknPopup.h>
-#include <AknUtils.h>
-#include <AknQueryDialog.h>
-#include <calencontext.h>
-#include <calcalendarinfo.h>
-#include <calcalendariterator.h>
-#include <CalendarInternalCRKeys.h>
-#include <calenmulticalutil.h>
// Default Calendar database path
-_LIT( KCalendarDatabaseFilePath, "c:calendar" );
-_LIT( KPhoneCalendar,"Personal" );
-_LIT( KExtCalendar,"Ext calendar" );
-const TInt KBuffLength = 24;
+_LIT( KCalendarDatabaseFilePath, "c:Calendar" );
+
// ============================ MEMBER FUNCTIONS ===============================
@@ -62,16 +40,14 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
+
CCalenGlobalData::CCalenGlobalData( MCalProgressCallBack& aCalCallBack )
: iCalCallBack( aCalCallBack )
{
TRACE_ENTRY_POINT;
iGlobalDataOwnsCalSession = EFalse;
- iGlobalDataOwnsEntryView = EFalse;
-
- iCalendarForcedExit = EFalse;
-
+
TRACE_EXIT_POINT;
}
@@ -88,7 +64,6 @@
MCalenContextChangeObserver* aNotifier )
{
TRACE_ENTRY_POINT;
-
CCalenGlobalData* self = NULL;
TAny* tlsPtr = Dll::Tls();
@@ -124,7 +99,7 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
EXPORT_C CCalenGlobalData* CCalenGlobalData::InstanceL()
- {
+ {
TRACE_ENTRY_POINT;
CCalenGlobalData* self = NULL;
@@ -135,13 +110,7 @@
{
// The global data has not yet been constructed.
// FIXME - Revise comment
- //TLS is NULL, so no CCalenGlobalData has been created yet.
- /* self = new( ELeave ) CCalenGlobalData;
- CleanupStack::PushL( self );
- self->ConstructL();
- //Store a self pointer in TLS
- User::LeaveIfError( Dll::SetTls(static_cast<TAny*>(self)));
- CleanupStack::Pop(self);*/
+ //TLS is NULL, so no CCalenGlobalData has been created yet.
User::Leave( KErrNotReady );
}
else
@@ -186,7 +155,6 @@
EXPORT_C CCalenGlobalData* CCalenGlobalData::Instance()
{
TRACE_ENTRY_POINT;
-
TAny* tlsPtr = Dll::Tls();
CCalenGlobalData* self = static_cast<CCalenGlobalData*>( tlsPtr );
@@ -204,14 +172,12 @@
// Symbian 2nd phase constructor can leave.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
-void CCalenGlobalData::ConstructL( MCalenContextChangeObserver* aNotifier )
+void CCalenGlobalData::ConstructL( MCalenContextChangeObserver* aNotifier)
{
TRACE_ENTRY_POINT;
- iContext = new (ELeave ) CCalenContextImpl( aNotifier );
-
- iNewInstanceViewCreation = NULL;
-
+ iContext = new (ELeave ) CalenContextImpl( aNotifier );
+
TRACE_EXIT_POINT;
}
@@ -266,108 +232,33 @@
CCalenGlobalData::~CCalenGlobalData()
{
TRACE_ENTRY_POINT;
-
- delete iSend;
- delete iInterimUtils;
- delete iUtilsAs;
- delete iMailboxUtils;
- delete iMRUtils;
-
- if (iInstanceView)
- {
- delete iInstanceView;
- iInstanceView = NULL;
- }
-
- if (iInstanceViewCreation)
- {
- delete iInstanceViewCreation;
- iInstanceViewCreation = NULL;
- }
-
- if (iEntryViewCreation)
- {
- delete iEntryViewCreation;
- iEntryViewCreation = NULL;
- }
+
+ delete iInterimUtils;
+ delete iEntryView;
+ delete iInstanceView;
+ delete iEntryViewCreation;
+ delete iInstanceViewCreation;
+ delete iContext;
- if (iNewInstanceViewCreation)
- {
- delete iNewInstanceViewCreation;
- iNewInstanceViewCreation = NULL;
- }
-
- if (iNewInstanceView)
- {
- delete iNewInstanceView;
- iNewInstanceView = NULL;
- }
-
- delete iContext;
-
- if(iGlobalDataOwnsEntryView)
- {
- if(iEntryView)
- {
- delete iEntryView;
- iEntryView = NULL;
- }
- }
-
- if (iGlobalDataOwnsCalSession)
+ if (iGlobalDataOwnsCalSession)
{
delete iCalSession;
}
- if( iFileMappingArray.Count() )
+ --iRefCount;
+
+ // The controller owns its own instance of the services, therefore the
+ // reference count will be one, immediatley before deletion.
+ if (iRefCount == 1)
{
- iFileMappingArray.ResetAndDestroy();
+ delete this;
}
-
- iKeyQueue.Reset();
-
- iHashDbidIndexMap.Close();
Dll::SetTls(NULL);
- if (iCalendarInfoList.Count())
- {
- iCalendarInfoList.ResetAndDestroy();
- }
-
- if (iCalendarsSession)
- {
- delete iCalendarsSession;
- iCalendarsSession = NULL;
- }
-
TRACE_EXIT_POINT;
}
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::MailboxUtilsL
-// Create MailBoxUtils if necessary and returns a reference
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CMRMailboxUtils& CCalenGlobalData::MRMailboxUtilsL()
- {
- TRACE_ENTRY_POINT;
-
- if (!iMailboxUtils)
- {
- if (InterimUtilsL().MRViewersEnabledL())
- {
- iMailboxUtils = CMRMailboxUtils::NewL();
- }
- else
- {
- User::Leave(KErrNotSupported);
- }
- }
-
- TRACE_EXIT_POINT;
- return *iMailboxUtils;
- }
// -----------------------------------------------------------------------------
// CCalenGlobalData::CalSessionL
@@ -377,41 +268,23 @@
EXPORT_C CCalSession& CCalenGlobalData::CalSessionL()
{
TRACE_ENTRY_POINT;
-
+
if (!iCalSession)
{
iGlobalDataOwnsCalSession = ETrue;
iCalSession = CCalSession::NewL();
TRAPD( err, iCalSession->OpenL(KCalendarDatabaseFilePath));
- if (err == KErrNotFound)
- {
- CCalCalendarInfo* calendarInfo = GetDefaultCalendarInfoL();
- CleanupStack::PushL(calendarInfo);
- iCalSession->CreateCalFileL( KCalendarDatabaseFilePath,
- *calendarInfo);
- iCalSession->OpenL(KCalendarDatabaseFilePath);
- CleanupStack::PopAndDestroy(calendarInfo);
- }
- else if(err == KErrNone)
+ if ( err == KErrNotFound )
{
- // temp solution...need to handle this case
- CCalCalendarInfo* calendarInfo = iCalSession->CalendarInfoL();
- CleanupStack::PushL(calendarInfo);
- if( !calendarInfo->NameL().Compare(KNullDesC) &&
- !calendarInfo->Enabled() )
- {
- calendarInfo->SetNameL(KExtCalendar);
- calendarInfo->SetColor(KRgbBlack.Value());
- iCalSession->SetCalendarInfoL(*calendarInfo);
- }
- CleanupStack::PopAndDestroy(calendarInfo);
-
+ iCalSession->CreateCalFileL(KCalendarDatabaseFilePath);
+ iCalSession->OpenL(KCalendarDatabaseFilePath); // not trapped anymore
}
else
{
User::LeaveIfError( err );
}
+
}
TRACE_EXIT_POINT;
@@ -419,32 +292,6 @@
}
// -----------------------------------------------------------------------------
-// CCalenGlobalData::CalSessionL
-// Based on the calendar name return already cached session from iFileMappingArray
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CCalSession& CCalenGlobalData::CalSessionL(const TDesC& aCalendar)
- {
- TRACE_ENTRY_POINT;
- CCalSession* session = NULL;
- HBufC* calendarFileName = aCalendar.AllocLC();
- TInt index = iFileMappingArray.Find(
- *calendarFileName,CCalenGlobalData::CalenInfoIdentifierL);
- CleanupStack::PopAndDestroy(calendarFileName);
- if(KErrNotFound != index)
- {
- session = iFileMappingArray[index]->GetSessionPtr();
- }
- else
- {
- User::LeaveIfError(KErrNotFound);
- }
-
- TRACE_EXIT_POINT;
- return *session;
- }
-
-// -----------------------------------------------------------------------------
// CCalenGlobalData::InstanceViewL
// Create an instance view if necessary and returns a reference. Creating an
// instance view is an asynchronous operation, but this call returns
@@ -457,11 +304,16 @@
EXPORT_C CCalInstanceView* CCalenGlobalData::InstanceViewL()
{
TRACE_ENTRY_POINT;
-
+
if (!iInstanceView && !iInstanceViewCreation)
{
if ( iEntryViewCreation )
{
+ /* We need queueing to avoid two immediate instance and entry view creation requests to symbian.
+ * Though symbian handle two immediate requests ,this we require because we have only one observer
+ * for callback and we would not be able to differentiate whether instance view got created or entry view got created.
+ * If we dont queue the second request, we may end up giving incomplete object to the caller function.
+ */
iQueued = &CreateInstanceViewL;
}
else
@@ -469,36 +321,12 @@
CreateInstanceViewL();
}
}
-
+
TRACE_EXIT_POINT;
return iInstanceView;
}
// -----------------------------------------------------------------------------
-// CCalenGlobalData::InstanceViewL
-// Based on collection id array Create an instance view if necessary and returns a reference.
-// Creating an instance view is an asynchronous operation, but this call returns
-// synchronously. When the view is created, Completed() is called, which stops
-// iAs allowing this function to complete.
-// Leaves with KErrInUse if this class is in the process of creating the
-// instance view
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CCalInstanceView* CCalenGlobalData::InstanceViewL(
- const RArray<TInt>& aCollectionIds)
- {
- TRACE_ENTRY_POINT;
-
- if(!iNewInstanceView && !iNewInstanceViewCreation)
- {
- CreateInstanceViewL(aCollectionIds);
- }
-
- TRACE_EXIT_POINT;
- return iNewInstanceView;
- }
-
-// -----------------------------------------------------------------------------
// CCalenGlobalData::EntryViewL
// Create an entry view if necessary and returns a reference. Creating an
// entry view is an asynchronous operation, but this call returns
@@ -511,11 +339,16 @@
EXPORT_C CCalEntryView* CCalenGlobalData::EntryViewL()
{
TRACE_ENTRY_POINT;
-
- if (!iEntryView && !iEntryViewCreation)
+
+ if (!iEntryView && !iEntryViewCreation)
{
if ( iInstanceViewCreation )
{
+ /* We need queueing to avoid two immediate instance and entry view creation requests to symbian.
+ * Though symbian handle two immediate requests ,this we require because we have only one observer
+ * for callback and we would not be able to differentiate whether instance view got created or entry view got created.
+ * If we dont queue the second request, we may end up giving incomplete object to the caller function.
+ */
iQueued = &CreateEntryViewL;
}
else
@@ -523,629 +356,21 @@
CreateEntryViewL();
}
}
-
- TRACE_EXIT_POINT;
+ TRACE_EXIT_POINT;
return iEntryView;
}
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::EntryViewL
-// Based on collection id array Create an entry view if necessary and returns a reference.
-// Creating an entry view is an asynchronous operation, but this call returns
-// synchronously. When the view is created, Completed() is called, which stops
-// iAs allowing this function to complete.
-// Leaves with KErrInUse if this class is in the process of creating the
-// entry view
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CCalEntryView* CCalenGlobalData::EntryViewL(
- const TCalCollectionId aCollectionId)
- {
- TRACE_ENTRY_POINT;
- __ASSERT_ALWAYS(aCollectionId > 0 ,User::Panic(_L("CCalenGlobalData"),-1));
-
- CCalEntryView* entryView = NULL;
-
- TInt index = iHashDbidIndexMap.FindL(aCollectionId);
- if(index != KErrNotFound)
- {
- entryView = iFileMappingArray[index]->GetEntryView();
- }
-
- if(!entryView)
- {
- User::LeaveIfNull(entryView);
- }
-
- TRACE_EXIT_POINT;
- return entryView;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::RegisterEntryViewObserver
-// Add observer into view observers entry observer list.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C TBool CCalenGlobalData::EntryViewExists()
- {
- TRACE_ENTRY_POINT;
- TRACE_EXIT_POINT;
- return ( iEntryView != NULL );
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::MeetingRequestUtilsL
-// Create MR Utils if necessary and returns a reference
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CMRUtils& CCalenGlobalData::MeetingRequestUtilsL()
- {
- TRACE_ENTRY_POINT;
-
- iCreateError = KErrNone;
- if (!iUtilsAs)
- {
- iUtilsAs = new (ELeave) CActiveSchedulerWait;
- }
- if (!iMRUtils)
- {
- if (InterimUtilsL().MRViewersEnabledL())
- {
- if (iUtilsAs->IsStarted())
- {
- User::Leave(KErrInUse);
- }
- else
- {
- //Get the currently selected mailbox
- CMRMailboxUtils::TMailboxInfo defaultMailbox;
- MRMailboxUtilsL().GetDefaultMRMailBoxL(defaultMailbox);
- //CMRUtils resolves meeting request utilities based on mtm uid
- TBuf8<KMaxUidName> mrMtm;
- CnvUtfConverter::ConvertFromUnicodeToUtf8(mrMtm, defaultMailbox.iMtmUid.Name());
- iMRUtils = CMRUtils::NewL(mrMtm, *this, CalSessionL(), NULL);
- iUtilsAs->Start();
- User::LeaveIfError(iCreateError);
- }
- }
- else
- {
- User::Leave(KErrNotSupported);
- }
- }
-
- TRACE_EXIT_POINT;
- return *iMRUtils;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::InterimUtilsL
-// Create a CCalenInterimUtils object if neccessary and return a reference
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CCalenInterimUtils2& CCalenGlobalData::InterimUtilsL()
+void CCalenGlobalData::CreateEntryViewL()
{
TRACE_ENTRY_POINT;
-
- if(!iInterimUtils)
- {
- iInterimUtils = CCalenInterimUtils2::NewL();
- }
-
- TRACE_EXIT_POINT;
- return *iInterimUtils;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CalenSendL
-// Create a CCalenSend object if neccessary and return a reference
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C CCalenSend& CCalenGlobalData::CalenSendL()
- {
- TRACE_ENTRY_POINT;
-
- if( !iSend )
- {
- iSend = CCalenSend::NewL( ECalenSend, CalSessionL() );
- }
-
- TRACE_EXIT_POINT;
- return *iSend;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::Context
-// Return a reference to the CCalenContext object
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C MCalenContext& CCalenGlobalData::Context()
- {
- TRACE_ENTRY_POINT;
- TRACE_EXIT_POINT;
- return *iContext;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenEditUi::AttemptToRetrieveDefaultMailboxL
-// Check to see if we have any mailboxes defined, and if we have a default
-// mailbox. If we don't, inform the user and return EFalse. This function
-// returns ETrue if aDefaultMailbox was initialised, and it is OK to create
-// a new MR.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C TBool CCalenGlobalData::AttemptToRetrieveDefaultMailboxL( CMRMailboxUtils::TMailboxInfo& aDefaultMailbox)
- {
- TRACE_ENTRY_POINT;
-
- CMRMailboxUtils& mbUtils = MRMailboxUtilsL();
- // Get the currently defined mailboxes.
- RArray<CMRMailboxUtils::TMailboxInfo> mailboxes;
- CleanupClosePushL(mailboxes);
- mbUtils.ListMailBoxesL(mailboxes);
-
- TBool canCreateMeetingRequest=EFalse;
- TInt mbCount = mailboxes.Count();
-
- // The following 'if-else' block should always initialise
- // defaultMailBox if canCreateMeetingRequest comes out as ETrue.
- if(mbCount > 0)
- {
- TInt res = KErrNone;
- TRAPD(err, res = mbUtils.GetDefaultMRMailBoxL(aDefaultMailbox));
- if( res == KErrNone && err == KErrNone)
- {
- canCreateMeetingRequest = ETrue;
- }
- else
- {
- // We have one or more mailboxes defined, but failed to get a default.
- // Ask user to answer "Select default mailbox" query. The available mailboxes must
- // first be reduced to only show mailboxes with an associated meetnig request solution
- RImplInfoPtrArrayOwn implArray;
- CleanupClosePushL( implArray );
- //Get all MRViewers Implementation
- const TUid mrViewersIface = {KMRViewersInterfaceUID};
- REComSession::ListImplementationsL(mrViewersIface, implArray );
-
- for (TInt i = mailboxes.Count() - 1; i >= 0; --i)
- {
- //See if any meeting request implementation matches this mailbox
- for (TInt j=0; j<implArray.Count(); ++j)
- {
- TBuf16<KMaxUidName> mbName;
- CnvUtfConverter::ConvertToUnicodeFromUtf8( mbName, implArray[j]->DataType() );
- if(mailboxes[i].iMtmUid.Name().CompareF(mbName) == 0)
- {
- //Found a match
- break;
- }
- //Mailbox has no matching meeting request solution
- //remove from list
- mailboxes.Remove(i);
- }
- }
- CleanupStack::PopAndDestroy(); //implArray
-
- TInt selected = PromptToSelectDefaultMailboxL(mailboxes);
-
- if(selected >= KErrNone)
- {
- mbUtils.SetDefaultMRMailBoxL( mailboxes[selected].iEntryId );
- canCreateMeetingRequest = ETrue;
- __ASSERT_ALWAYS((mbUtils.GetDefaultMRMailBoxL( aDefaultMailbox ) == KErrNone), User::Invariant()); // so we don't return ref to local variable.
- }
- }
- }
- else
- {
- // Force the check of MR Impl existing
- InterimUtilsL().MRViewersEnabledL(ETrue); //ignore result
- }
-
- CleanupStack::PopAndDestroy(); // mailboxes
-
- TRACE_EXIT_POINT;
- return canCreateMeetingRequest;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::ResetKeyEventQueue
-// Reset Keyevents queue
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C void CCalenGlobalData::ResetKeyEventQueue()
- {
- TRACE_ENTRY_POINT;
- iKeyQueue.Reset();
+ iEntryViewCreation = CCalEntryView::NewL( CalSessionL(), iCalCallBack );
TRACE_EXIT_POINT;
}
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::QueueKeyEvent
-// Queue key press event in a queue
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C TBool CCalenGlobalData::QueueKeyEvent(const TKeyEvent& aEvent,
- TEventCode aType)
- {
- TRACE_ENTRY_POINT;
- TBool result(EFalse);
- TQueuedKeyEvent item;
- item.iType = aType;
- item.iEvent = aEvent;
- if( iKeyQueue.Insert(item, iKeyQueue.Count()) == KErrNone) // add to last
- {
- result = ETrue;
- }
- TRACE_EXIT_POINT;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::GetQueueKeyEvent
-// Get 1 queued event from the queue
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-EXPORT_C TBool CCalenGlobalData::GetQueuedKeyEvent(TKeyEvent& aEvent, TEventCode& aType)
- {
- TRACE_ENTRY_POINT;
- TBool result(EFalse);
- if(iKeyQueue.Count() > 0)
- {
- TQueuedKeyEvent item;
- item = iKeyQueue[0];// get first
- aEvent = item.iEvent;
- aType = item.iType;
- iKeyQueue.Remove(0); // remove first
- result = ETrue;
- iKeyQueue.Compress();
- }
- TRACE_EXIT_POINT;
- return result;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::ConstructFileMappingL
-// Constructs mapping between symbian calendar file and metabd info
-// -----------------------------------------------------------------------------
-EXPORT_C TBool CCalenGlobalData::ConstructFileMappingL()
- {
- TRACE_ENTRY_POINT;
- iCalendarsSession = CCalSession::NewL();
-
- ConstructCalendarsListL();
-
- iFileMappingArray.Reset();
-
- for(TInt index = 0; index < iCalendarInfoList.Count(); index++)
- {
- TPtrC calendarFileName = iCalendarInfoList[index]->FileNameL();
- CCalenFileMapping* filemap = CCalenFileMapping::NewL();
- CleanupStack::PushL(filemap);
- filemap->SetCalendarFileNameL(calendarFileName);
-
- iNewEntryView = NULL;
- iNewEntryViewCreation = NULL;
- if(iCalSession)
- {
- iNewCalSession = NULL;
- CCalCalendarInfo* calendarInfo = iCalendarInfoList[index];
-
- CCalSession& tempSession = CreateNewSessionL( calendarFileName,
- *calendarInfo );
- filemap->SetSessionPtr(&tempSession);
- filemap->SetCollectionId(tempSession.CollectionIdL());
- CreateEntryViewL(tempSession);
- filemap->SetEntryView( iNewEntryView );
- }
- else
- {
- CCalSession& tempSession = CalSessionL();
- filemap->SetSessionPtr(&tempSession);
- filemap->SetCollectionId(tempSession.CollectionIdL());
- CreateEntryViewL(tempSession);
- filemap->SetEntryView( iNewEntryView );
- iGlobalDataOwnsEntryView = EFalse;
- iGlobalDataOwnsCalSession = EFalse;
- }
- iFileMappingArray.Append(filemap);
- CleanupStack::Pop(filemap);
- }
-
- for(TInt index = 0; index < iFileMappingArray.Count(); index++)
- {
- iHashDbidIndexMap.InsertL( iFileMappingArray[index]->GetCollectionId(),
- index);
- }
-
- TRACE_EXIT_POINT
- return ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::InitializeGlobalDataL
-// Initializes multiple db related objects
-// -----------------------------------------------------------------------------
-EXPORT_C void CCalenGlobalData::InitializeGlobalDataL()
- {
- TRACE_ENTRY_POINT
-
- ConstructFileMappingL();
-
- TRACE_EXIT_POINT
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::PromptToSelectDefaultMailboxL
-// Prompts the user to select the default mailbox. If the user cancels, the
-// function returns KErrCancel, otherwise it returns the index of the selected
-// mailbox. This function does not set the default mailbox, but rather returns
-// the index of the given array to which the default should be set.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-TInt CCalenGlobalData::PromptToSelectDefaultMailboxL( RArray<CMRMailboxUtils::TMailboxInfo>& aMailboxes )
- {
- TRACE_ENTRY_POINT;
-
- TInt mbCount = aMailboxes.Count();
-
- TInt selected;
- if (mbCount > 0)
- {
- CAknSinglePopupMenuStyleListBox* list =
- new (ELeave) CAknSinglePopupMenuStyleListBox;
- CleanupStack::PushL(list);
-
- CAknPopupList* popupList = CAknPopupList::NewL(list, R_AVKON_SOFTKEYS_OK_CANCEL);
- CleanupStack::PushL(popupList);
-
- list->ConstructL(popupList, CEikListBox::ELeftDownInViewRect);
- list->CreateScrollBarFrameL(ETrue);
- list->ScrollBarFrame()->SetScrollBarVisibilityL(
- CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
-
- CEikonEnv* eikEnv = CEikonEnv::Static();
-
- CDesCArrayFlat* items = new (ELeave)CDesCArrayFlat(mbCount);
- CleanupStack::PushL(items);
- for(TInt i=0; i<mbCount; ++i)
- {
- items->AppendL( aMailboxes[i].iName );
- }
- CleanupStack::Pop(items);
- CTextListBoxModel* model = list->Model();
-
- //Pass ownersip of items to model
- model->SetItemTextArray(items);
-
- HBufC* title = StringLoader::LoadLC(R_CALEN_SELECT_MAILBOX, eikEnv);
- popupList->SetTitleL(*title);
- CleanupStack::PopAndDestroy(title);
-
- TBool accepted = popupList->ExecuteLD();
- CleanupStack::Pop(); // popupList
-
- if(accepted)
- {
- selected = list->CurrentItemIndex();
- }
- else
- {
- selected = KErrCancel;
- }
-
- CleanupStack::PopAndDestroy(); // list
- }
- else
- {
- //No mailboxes defined. Could prompt user to define one here?
- selected = KErrCancel;
- }
-
- TRACE_EXIT_POINT;
- return selected;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::HandleCalEngStatus
-// Called when Meeting Request utils are creation is complete.
-// Stops the CActiveSchedulerWait, allowing MeetingRequestUtilsL() to complete
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-void CCalenGlobalData::HandleCalEngStatus( TMRUtilsCalEngStatus aStatus )
- {
- TRACE_ENTRY_POINT;
-
- ASSERT(iUtilsAs);
-
- switch (aStatus)
- {
- case ENotReady:
- {
- //Keep waiting
- }
- break;
- case EAvailableWithoutTombs:
- case EAvailable:
- {
- //Ready for use. Stop the CActiveSchedulerWait and return
- iUtilsAs->AsyncStop();
- iCreateError = KErrNone;
- }
- break;
- case ENotAvailable:
- {
- //Somethings gone wrong. Stop the CActiveSchedulerWait but force
- //MeetingRequestUtilsL to leave.
- //We'll use KErrNotFound for now but we don't know what the problem is.
- iUtilsAs->AsyncStop();
- iCreateError = KErrNotFound;
- }
- break;
- default:
- {
- //Shouldn't ever get called.
- iUtilsAs->AsyncStop();
- iCreateError = KErrArgument;
- }
- break;
- }
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::HandleNotification
-// Handle any notification if registered for
-// -----------------------------------------------------------------------------
-void CCalenGlobalData::HandleNotification(const TCalenNotification aNotification )
- {
- TRACE_ENTRY_POINT;
-
- switch(aNotification)
- {
- case ECalenNotifyEntryInstanceViewCreated:
- {
- ViewCreationCompleted( ETrue );
- }
- break;
- case ECalenNotifyEntryInstanceViewCreationFailed:
- {
- ViewCreationCompleted( EFalse );
- }
- break;
- case ECalenNotifyDeleteInstanceView:
- {
- //InstanceView has to be deleted since deleting any session(Calendar)
- //entryView and instanceView has to be deleted before deleting session.
- if(iNewInstanceView)
- {
- delete iNewInstanceView;
- iNewInstanceViewCreation = iNewInstanceView = NULL;
- }
-
- //If InstanceView is called by any component single instanceView
- // without the knowledge of multi session (calendar).
- //This instance also should be deleted for deleting the session.
- if(iInstanceView)
- {
- delete iInstanceView;
- iInstanceView = iInstanceViewCreation = NULL;
- }
- }
- break;
- case ECalenNotifyRealExit:
- {
- iCalendarForcedExit = ETrue;
- }
- break;
- case ECalenNotifyCalendarInfoCreated:
- {
- HandleCalendarInfoCreatedL();
- }
- break;
- case ECalenNotifyCalendarInfoUpdated:
- {
- HandleCalendarInfoUpdatedL();
- }
- break;
- case ECalenNotifyCalendarFileDeleted:
- {
- HandleCalendarFileDeletedL();
- }
- break;
- default:
- break;
- }
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CreateEntryViewL
-// -----------------------------------------------------------------------------
-void CCalenGlobalData::CreateEntryViewL()
- {
- TRACE_ENTRY_POINT;
-
- HBufC* calendarFileName = KCalendarDatabaseFilePath().AllocLC();
- TInt index = iFileMappingArray.Find(
- *calendarFileName, CCalenGlobalData::CalenInfoIdentifierL);
- CleanupStack::PopAndDestroy(calendarFileName);
- if(index != KErrNotFound)
- {
- iEntryView = iFileMappingArray[index]->GetEntryView();
- }
-
- if(!iEntryView)
- {
- User::LeaveIfNull(iEntryView);
- }
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CreateEntryViewL
-// -----------------------------------------------------------------------------
-void CCalenGlobalData::CreateEntryViewL(CCalSession& session)
- {
- TRACE_ENTRY_POINT;
- iNewEntryViewCreation = CCalEntryView::NewL( session, iCalCallBack );
-
- if(iNewEntryViewCreation)
- {
- iNewEntryView = iNewEntryViewCreation;
- }
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CreateInstanceViewL
-// -----------------------------------------------------------------------------
void CCalenGlobalData::CreateInstanceViewL()
{
TRACE_ENTRY_POINT;
iInstanceViewCreation = CCalInstanceView::NewL( CalSessionL(), iCalCallBack );
- if(iInstanceViewCreation)
- {
- iInstanceView = iInstanceViewCreation;
- }
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CreateEntryViewL
-// -----------------------------------------------------------------------------
-void CCalenGlobalData::CreateInstanceViewL(const RArray<TInt>& aCollectionIds)
- {
- TRACE_ENTRY_POINT;
-
- RPointerArray<CCalSession> sessionArray;
-
- for(TInt i = 0; i < aCollectionIds.Count() ; i++)
- {
- TInt index = iHashDbidIndexMap.FindL(aCollectionIds[i]);
- if(index != KErrNotFound)
- {
- CCalSession* sessionPtr = iFileMappingArray[index]->GetSessionPtr();
- sessionArray.AppendL(sessionPtr);
- }
- }
-
- if(sessionArray.Count())
- {
- iNewInstanceViewCreation = CCalInstanceView::NewL( sessionArray, iCalCallBack );
- if(iNewInstanceViewCreation)
- {
- iNewInstanceView = iNewInstanceViewCreation;
- }
- }
-
- sessionArray.Reset();
TRACE_EXIT_POINT;
}
@@ -1164,8 +389,6 @@
// Something has gone wrong
delete iEntryViewCreation;
delete iInstanceViewCreation;
- delete iNewEntryViewCreation;
- delete iNewInstanceViewCreation;
}
else
{
@@ -1177,22 +400,11 @@
{
iInstanceView = iInstanceViewCreation;
}
-
- if ( iNewEntryViewCreation )
- {
- iNewEntryView = iEntryViewCreation;
- }
- else if ( iNewInstanceViewCreation )
- {
- iNewInstanceView = iNewInstanceViewCreation;
- }
}
iEntryViewCreation = NULL;
iInstanceViewCreation = NULL;
- iNewEntryViewCreation = NULL;
- iNewInstanceViewCreation = NULL;
-
+
if ( iQueued )
{
(this->*iQueued)();
@@ -1203,511 +415,44 @@
}
// -----------------------------------------------------------------------------
-// CCalenGlobalData::CreateNewSessionL
-// Create a Calendar session if necessary and return a reference
+// CCalenGlobalData::RegisterEntryViewObserver
+// Add observer into view observers entry observer list.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
-CCalSession& CCalenGlobalData::CreateNewSessionL( const TDesC& aCalendar )
+EXPORT_C TBool CCalenGlobalData::EntryViewExists()
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ return ( iEntryView != NULL );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCalenGlobalData::Context
+// Return a reference to the CCalenContext object
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+EXPORT_C MCalenContext& CCalenGlobalData::Context()
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ return *iContext;
+ }
+
+void CCalenGlobalData::HandleNotification(const TCalenNotification aNotification )
{
TRACE_ENTRY_POINT;
- if(!iNewCalSession)
+ if ( aNotification == ECalenNotifyEntryInstanceViewCreated )
{
- iNewCalSession = CCalSession::NewL(*iCalSession);
-
- TRAPD( err, iNewCalSession->OpenL(aCalendar));
- if ( err == KErrNotFound )
- {
- iNewCalSession->CreateCalFileL(aCalendar);
- iNewCalSession->OpenL(aCalendar); // not trapped anymore
- }
- else
- {
- User::LeaveIfError( err );
- }
+ ViewCreationCompleted( ETrue );
}
- TRACE_EXIT_POINT;
- return *iNewCalSession;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CalenInfoIdentifierL
-// -----------------------------------------------------------------------------
-//
-TBool CCalenGlobalData::CalenInfoIdentifierL( const HBufC* aName,
- const CCalenFileMapping& aFileMapping)
- {
- TRACE_ENTRY_POINT;
- TPtrC calendarFileName = aFileMapping.GetCalendarFileName();
- TRACE_EXIT_POINT;
- return (!calendarFileName.CompareF(*aName));
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::AddCalendarL
-// adds new calendar file and sets calendar info to it
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCalenGlobalData::AddCalendarL(CCalCalendarInfo* aCalendarInfo)
- {
- TRACE_ENTRY_POINT;
+ else if (aNotification == ECalenNotifyEntryInstanceViewCreationFailed )
+ {
+ ViewCreationCompleted( EFalse );
+ }
- CCalenFileMapping* fileMapping = CCalenFileMapping::NewL();
- CleanupStack::PushL(fileMapping);
-
- HBufC* calendarFileName = CCalenMultiCalUtil::GetNextAvailableCalFileL();
- CleanupStack::PushL(calendarFileName);
- fileMapping->SetCalendarFileNameL(calendarFileName->Des());
- CleanupStack::PopAndDestroy(calendarFileName);
- if(iCalSession)
- {
- iNewCalSession = NULL;
- iNewEntryView = NULL;
- iNewEntryViewCreation = NULL;
- TPtrC calFileName = fileMapping->GetCalendarFileName();
- CleanupStack::PushL(aCalendarInfo);
- CCalSession& tempSession = CreateNewSessionL( calFileName,
- *aCalendarInfo );
- fileMapping->SetSessionPtr(&tempSession);
- fileMapping->SetCollectionId(tempSession.CollectionIdL());
-
- if(!iCalendarForcedExit)
- {
- CreateEntryViewL(tempSession);
- }
- fileMapping->SetEntryView( iNewEntryView );
- CleanupStack::PopAndDestroy(aCalendarInfo);
- iCalendarInfoList.Append(tempSession.CalendarInfoL());
- }
-
- CleanupStack::Pop(fileMapping);
- iFileMappingArray.Append(fileMapping);
-
- iHashDbidIndexMap.Close();
- for(TInt index = 0; index < iFileMappingArray.Count(); index++)
- {
- iHashDbidIndexMap.InsertL( iFileMappingArray[index]->GetCollectionId(),
- index);
- }
-
- TRACE_EXIT_POINT
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::RemoveDeadCalendarsL
-// removes dead calendar files from the file system
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCalenGlobalData::RemoveDeadCalendarsL()
- {
- TRACE_ENTRY_POINT;
- CCalCalendarIterator* calendarIterator =
- CCalCalendarIterator::NewL(*iCalendarsSession);
- CleanupStack::PushL(calendarIterator);
-
- for( CCalCalendarInfo* calendarInfo = calendarIterator->FirstL();
- calendarInfo!=NULL;calendarInfo = calendarIterator->NextL())
- {
- CleanupStack::PushL(calendarInfo);
- HBufC* filename = calendarInfo->FileNameL().AllocLC();
- TInt index = iFileMappingArray.Find( *filename,
- CCalenGlobalData::CalenInfoIdentifierL);
- if(KErrNotFound == index)
- {
- CCalSession* session = CCalSession::NewL(*iCalSession);
- CleanupStack::PushL(session);
- TRAP_IGNORE(session->DeleteCalFileL( *filename ));
- CleanupStack::PopAndDestroy(session);
- }
- CleanupStack::PopAndDestroy(filename);
- CleanupStack::PopAndDestroy(calendarInfo);
- }
- CleanupStack::PopAndDestroy(calendarIterator);
TRACE_EXIT_POINT;
}
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::RemoveCalendarL
-// removes calendar file from the file system
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCalenGlobalData::RemoveCalendarL(const TDesC& aCalendarFileName)
- {
- TRACE_ENTRY_POINT;
-
- HBufC* calendarFilename = aCalendarFileName.AllocLC();
- TInt index = iFileMappingArray.Find( *calendarFilename,
- CCalenGlobalData::CalenInfoIdentifierL);
-
- if( KErrNotFound == index )
- {
- CleanupStack::PopAndDestroy(calendarFilename);
- // reconstruct the calendar list using the iterator
- ConstructCalendarsListL();
-
- TRACE_EXIT_POINT;
- return;
- }
-
- if( index >= 0 )
- {
- CCalenFileMapping* filemap = iFileMappingArray.operator [](index);
- CCalSession* session = filemap->GetSessionPtr();
- if(session)
- {
- TRAPD(err, session->DeleteCalFileL(aCalendarFileName));
- if( err == KErrInUse )
- {
- //Calendar file is opened by other application.
- //Mark the file as deleted. Try delete the file at later time.
- // Get the CalFile
- CCalCalendarInfo* caleninfo = session->CalendarInfoL();
- CleanupStack::PushL(caleninfo);
-
- // Mark the CalFile as Hidden
- caleninfo->SetEnabled( EFalse );
-
- // Set the SyncStatus to False
- TBuf8<KBuffLength> keyBuff;
- keyBuff.Zero();
- keyBuff.AppendNum( ESyncStatus );
- TBool syncstatus( EFalse );
- TPckgC<TBool> pckgSyncStatusValue( syncstatus );
- caleninfo->SetPropertyL( keyBuff, pckgSyncStatusValue );
-
- // Mark the meta property as SoftDeleted
- keyBuff.Zero();
- keyBuff.AppendNum(EMarkAsDelete);
- TPckgC<TBool> pkgSoftDelete( ETrue );
- caleninfo->SetPropertyL(keyBuff, pkgSoftDelete);
-
- session->SetCalendarInfoL( *caleninfo );
- CleanupStack::PopAndDestroy(caleninfo);
- }
- TInt infoListIndex = iCalendarInfoList.Find(*calendarFilename,
- CCalenGlobalData::CalenCalendarInfoIdentiferL);
-
- CCalCalendarInfo* calendarInfo = iCalendarInfoList[infoListIndex];
- iCalendarInfoList.Remove(infoListIndex);
- delete calendarInfo;
- calendarInfo = NULL;
-
- iHashDbidIndexMap.Close();
-
- iFileMappingArray.Remove(index);
- delete filemap;
- for(TInt index = 0; index < iFileMappingArray.Count(); index++)
- {
- iHashDbidIndexMap.InsertL(iFileMappingArray[index]->GetCollectionId(), index);
- }
- }
- }
-
-
- CleanupStack::PopAndDestroy(calendarFilename);
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::UpdateCalendarL
-// updates calendar info for the calendar file
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCalenGlobalData::UpdateCalendarL(CCalCalendarInfo* aCalendarInfo)
- {
- TRACE_ENTRY_POINT;
-
- HBufC* calendar = aCalendarInfo->FileNameL().AllocLC();
- TInt index = iFileMappingArray.Find( *calendar,
- CCalenGlobalData::CalenInfoIdentifierL);
-
- if(index != KErrNotFound)
- {
- CCalSession* session = iFileMappingArray[index]->GetSessionPtr();
- if(session)
- {
- session->SetCalendarInfoL(*aCalendarInfo);
- }
- }
- CleanupStack::PopAndDestroy(calendar);
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::GetCalFileNameForCollectionId
-// Get Calendar file name for the given collectionid
-// -----------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CCalenGlobalData::GetCalFileNameForCollectionId(
- const TCalCollectionId aColId)
- {
- TRACE_ENTRY_POINT;
-
- TInt index = iFileMappingArray.Find( aColId,
- CCalenGlobalData::CalenFileMapIdentifierForColId );
-
- if(index != KErrNotFound)
- {
- TRACE_EXIT_POINT;
- return iFileMappingArray[index]->GetCalendarFileName();
- }
- else
- {
- TRACE_EXIT_POINT;
- return KNullDesC;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::GetAllCalendarInfoL
-// Get all available calendar info
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CCalenGlobalData::GetAllCalendarInfoL(
- RPointerArray<CCalCalendarInfo>& aCalendarInfoList )
- {
- TRACE_ENTRY_POINT;
-
- for(TInt index=0;index<iCalendarInfoList.Count();index++)
- {
- aCalendarInfoList.AppendL(iCalendarInfoList[index]);
- }
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CreateNewSessionL
-// Create new session with metadata
-// -----------------------------------------------------------------------------
-//
-CCalSession& CCalenGlobalData::CreateNewSessionL( const TDesC& aCalendar,
- const CCalCalendarInfo& aCalendarInfo )
- {
- TRACE_ENTRY_POINT;
-
- if(!iNewCalSession)
- {
- iNewCalSession = CCalSession::NewL(*iCalSession);
-
- TRAPD( err, iNewCalSession->OpenL(aCalendar));
- if ( err == KErrNotFound )
- {
- iNewCalSession->CreateCalFileL( aCalendar, aCalendarInfo );
- iNewCalSession->OpenL(aCalendar); // not trapped anymore
- }
- else
- {
- User::LeaveIfError( err );
- }
- }
- TRACE_EXIT_POINT;
- return *iNewCalSession;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CalenFileMapIdentifierForColId
-// Search for filemap index based on collection id
-// -----------------------------------------------------------------------------
-//
-TBool CCalenGlobalData::CalenFileMapIdentifierForColId(const TCalCollectionId* aId,
- const CCalenFileMapping& aFileMapping )
- {
- TRACE_ENTRY_POINT;
- TRACE_EXIT_POINT;
- return (*aId == (aFileMapping.GetCollectionId()));
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::CalenCalendarInfoIdentiferL
-// Construct calendar list from the calendar iterator
-// -----------------------------------------------------------------------------
-//
-TBool CCalenGlobalData::CalenCalendarInfoIdentiferL(const HBufC* aFileName,
- const CCalCalendarInfo& aCalendarInfo)
- {
- TRACE_ENTRY_POINT
- TPtrC calendarFileName = aCalendarInfo.FileNameL();
- TRACE_EXIT_POINT
- return (!calendarFileName.CompareF(*aFileName) );
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::ConstructCalendarsListL
-// Construct calendar list from the calendar iterator
-// -----------------------------------------------------------------------------
-//
-void CCalenGlobalData::ConstructCalendarsListL()
- {
- TRACE_ENTRY_POINT;
-
- iCalendarInfoList.ResetAndDestroy();
- CCalCalendarIterator* calendarIterator =
- CCalCalendarIterator::NewL(*iCalendarsSession);
- CleanupStack::PushL(calendarIterator);
-
- for( CCalCalendarInfo* calendarInfo = calendarIterator->FirstL();
- calendarInfo!=NULL;calendarInfo = calendarIterator->NextL())
- {
- TBuf8<KBuffLength> keyBuff;
- // Mark the meta property as SoftDeleted
- keyBuff.Zero();
- keyBuff.AppendNum(EMarkAsDelete);
- TBool softDelete = EFalse;
- TPckgC<TBool> pkgSoftDelete( softDelete );
- TRAPD(err,pkgSoftDelete.Set(calendarInfo->PropertyValueL(keyBuff)));
- if( KErrNone == err )
- {
- softDelete = pkgSoftDelete();
- }
- if(!softDelete)
- {
- iCalendarInfoList.Append(calendarInfo);
- }
- else
- {
- delete calendarInfo;
- }
- }
- CleanupStack::PopAndDestroy(calendarIterator);
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::GetDefaultCalendarInfoL
-// Get default calendar info
-// -----------------------------------------------------------------------------
-//
-CCalCalendarInfo* CCalenGlobalData::GetDefaultCalendarInfoL()
- {
- TRACE_ENTRY_POINT;
-
- CCalCalendarInfo* defaultCalendarInfo = CCalCalendarInfo::NewL();
- CleanupStack::PushL(defaultCalendarInfo);
- defaultCalendarInfo->SetColor(KRgbRed.Value());
- defaultCalendarInfo->SetEnabled(ETrue);
- defaultCalendarInfo->SetNameL(KPhoneCalendar);
- CleanupStack::Pop(defaultCalendarInfo);
-
- TRACE_EXIT_POINT;
- return defaultCalendarInfo;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::HandleCalendarInfoCreatedL
-// Handles the notification ECalenNotifyCalendarInfoCreated
-// -----------------------------------------------------------------------------
-//
-void CCalenGlobalData::HandleCalendarInfoCreatedL()
- {
- TRACE_ENTRY_POINT;
- // get the filename from the context
- TDesC& fileName = iContext->GetCalendarFileNameL();
-
- // check for the calendar file already exists in filemap list
- HBufC* calendar = fileName.AllocLC();
- TInt index = iFileMappingArray.Find(*calendar,
- CCalenGlobalData::CalenInfoIdentifierL);
- CleanupStack::PopAndDestroy(calendar);
-
- // if not exists,add to filemapper list
- if (KErrNotFound == index)
- {
- CCalenFileMapping* fileMapper = CCalenFileMapping::NewL();
- CleanupStack::PushL(fileMapper);
- fileMapper->SetCalendarFileNameL(fileName);
-
- iNewEntryView = NULL;
- iNewEntryViewCreation = NULL;
- CCalSession* newSession = NULL;
- if(iCalSession)
- {
- // create the new session using default session
- newSession = CCalSession::NewL(*iCalSession);
- CleanupStack::PushL(newSession);
- TRAPD(err,newSession->OpenL(fileName));
- User::LeaveIfError( err );
- CleanupStack::Pop(newSession);
- // set filemapper data
- fileMapper->SetSessionPtr(newSession);
- fileMapper->SetCollectionId(newSession->CollectionIdL());
-
- if(!iCalendarForcedExit)
- {
- CreateEntryViewL(*newSession);
- }
- fileMapper->SetEntryView( iNewEntryView );
-
- iCalendarInfoList.AppendL(newSession->CalendarInfoL());
- }
- else
- {
- // create the first session
- iCalSession = CCalSession::NewL();
- TRAPD(err,iCalSession->OpenL(fileName));
- User::LeaveIfError(err);
-
- // set filemapper data
- fileMapper->SetSessionPtr(iCalSession);
- fileMapper->SetCollectionId(iCalSession->CollectionIdL());
-
- if(!iCalendarForcedExit)
- {
- CreateEntryViewL(*iCalSession);
- }
-
- fileMapper->SetEntryView(iNewEntryView);
- iGlobalDataOwnsEntryView = EFalse;
- iGlobalDataOwnsCalSession = EFalse;
- iCalendarInfoList.AppendL(iCalSession->CalendarInfoL());
- }
- // append to filemapper list
- iFileMappingArray.Append(fileMapper);
- CleanupStack::Pop(fileMapper);
-
- iHashDbidIndexMap.Close();
- for(TInt index = 0; index < iFileMappingArray.Count(); index++)
- {
- iHashDbidIndexMap.InsertL(
- iFileMappingArray[index]->GetCollectionId(), index);
- }
- }
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::HandleCalendarInfoUpdatedL
-// Handles the notification ECalenNotifyCalendarInfoUpdated
-// -----------------------------------------------------------------------------
-//
-void CCalenGlobalData::HandleCalendarInfoUpdatedL()
- {
- TRACE_ENTRY_POINT;
-
- // reconstruct the calendar list using the iterator
- ConstructCalendarsListL();
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CCalenGlobalData::HandleCalendarFileDeletedL
-// Handles the notification ECalenNotifyCalendarFileDeleted
-// -----------------------------------------------------------------------------
-//
-void CCalenGlobalData::HandleCalendarFileDeletedL()
- {
- TRACE_ENTRY_POINT;
-
- // get the filename from the context
- TDesC& fileName = iContext->GetCalendarFileNameL();
-
- // delete the calendar file
- RemoveCalendarL(fileName);
-
- TRACE_EXIT_POINT;
- }
-
-// End of file
+// Enf of file