--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/multicaluidialog/src/multicaluidialogmodel.cpp Wed Sep 01 12:32:31 2010 +0100
@@ -0,0 +1,349 @@
+/*
+ * 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 : Implemrntation class for calenmultidbutility .
+ *
+ *
+ */
+// system include.
+#include <calsession.h>
+#include <calentryview.h>
+#include <calentry.h>
+#include <CalenInterimUtils2.h>
+#include <calcalendarinfo.h>
+#include <calcalendariterator.h>
+#include <calenmulticaluids.hrh>
+#include <ErrorUI.h>
+
+// user include.
+#include "multicaluidialogmodel.h"
+#include "calendarui_debug.h"
+#include "CleanupResetAndDestroy.h"
+
+const TInt KBuffLength = 24;
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::CMultiCalUiDialogModel
+// Constructor
+// ----------------------------------------------------------------------------
+//
+CMultiCalUiDialogModel::CMultiCalUiDialogModel()
+ {
+ TRACE_ENTRY_POINT
+ TRACE_EXIT_POINT
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::NewL
+// First phase constructor
+// ----------------------------------------------------------------------------
+//
+CMultiCalUiDialogModel* CMultiCalUiDialogModel::NewL()
+ {
+ TRACE_ENTRY_POINT
+ CMultiCalUiDialogModel* self = CMultiCalUiDialogModel::NewLC();
+ CleanupStack::Pop(self);
+ TRACE_EXIT_POINT
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::NewLC
+// First phase constructor
+// ----------------------------------------------------------------------------
+//
+CMultiCalUiDialogModel* CMultiCalUiDialogModel::NewLC()
+ {
+ TRACE_ENTRY_POINT
+ CMultiCalUiDialogModel* self = new (ELeave) CMultiCalUiDialogModel();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ TRACE_EXIT_POINT
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::~CMultiCalUiDialogModel
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+CMultiCalUiDialogModel::~CMultiCalUiDialogModel()
+ {
+ TRACE_ENTRY_POINT
+
+ iCalendarInfoList.ResetAndDestroy();
+
+ if (iCalendarsSession)
+ {
+ delete iCalendarsSession;
+ iCalendarsSession = NULL;
+ }
+
+ iCalEntryViewArray.ResetAndDestroy();
+
+ iCalSessionArray.ResetAndDestroy();
+
+ iCalendarStatus.Reset();
+
+ if (iInterimUtils)
+ {
+ delete iInterimUtils;
+ iInterimUtils = NULL;
+ }
+
+ iCalEntries.Reset();
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::SetCalEntry
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+void CMultiCalUiDialogModel::SetCalEntryL(
+ const RPointerArray<CCalEntry>& aCalEntries)
+ {
+ TRACE_ENTRY_POINT
+ //We take only the pointers to entries , we dont own it
+ //So never do iCalEntries.ResetAndDestroy() only Reset
+ for (TInt i = 0; i < aCalEntries.Count(); i++)
+ {
+ iCalEntries.AppendL(aCalEntries[i]);
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::GetMultiDbInfo
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+RPointerArray<CCalCalendarInfo>& CMultiCalUiDialogModel::GetCalendarInfoArray()
+ {
+ TRACE_ENTRY_POINT
+ TRACE_EXIT_POINT;
+ return iCalendarInfoList;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::ConstructL
+// Second phase constructor
+// ----------------------------------------------------------------------------
+//
+void CMultiCalUiDialogModel::ConstructL()
+ {
+ TRACE_ENTRY_POINT
+ //iCalSessionArray takes ownership of this.
+ CCalSession* defaultSession = CCalSession::NewL();
+
+ TRAPD(err,GetAllCalendarInfoL(iCalendarInfoList));
+
+ //Something happened and
+ if(err!=KErrNone)
+ {
+ CErrorUI* errorUi = CErrorUI::NewLC();
+ errorUi->ShowGlobalErrorNoteL( err );
+ CleanupStack::PopAndDestroy( errorUi );
+ }
+
+ for (TInt index = 0; index < iCalendarInfoList.Count(); index++)
+ {
+ iCalendarStatus.Append(0);
+
+ if (!index) //First create the default session
+ {
+ const TPtrC name = iCalendarInfoList[index]->FileNameL();
+ defaultSession->OpenL(name);
+ iCalSessionArray.Append(defaultSession);
+ CCalEntryView* entryView = CCalEntryView::NewL(*defaultSession);
+ CleanupStack::PushL(entryView);
+ iCalEntryViewArray.Append(entryView);
+ CleanupStack::Pop(entryView);
+ }
+ else
+ {
+ CCalSession* session = CCalSession::NewL(*defaultSession);
+ CleanupStack::PushL(session);
+ const TPtrC name = iCalendarInfoList[index]->FileNameL();
+ session->OpenL(name);
+ CleanupStack::Pop(session);
+ iCalSessionArray.Append(session);
+ CCalEntryView* entryView = CCalEntryView::NewL(*session);
+ CleanupStack::PushL(entryView);
+ iCalEntryViewArray.Append(entryView);
+ CleanupStack::Pop(entryView);
+ }
+ }
+
+ iInterimUtils = CCalenInterimUtils2::NewL();
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::SetCalendarStatus
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+void CMultiCalUiDialogModel::SetCalendarStatus(TInt aIndex, TBool aStatus)
+ {
+ TRACE_ENTRY_POINT
+ __ASSERT_ALWAYS(aIndex >= 0,User::Invariant());
+ iCalendarStatus.Remove(aIndex);
+ iCalendarStatus.Insert(aStatus,aIndex);
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::GetCalendarStatus
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+TBool CMultiCalUiDialogModel::GetCalendarStatus(TInt aIndex)
+ {
+ TRACE_ENTRY_POINT
+ __ASSERT_ALWAYS(aIndex >= 0,User::Invariant());
+ TRACE_EXIT_POINT;
+ return iCalendarStatus[aIndex];
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::MarkedCalendarsCount
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+TInt CMultiCalUiDialogModel::MarkedCalendarsCount()
+ {
+ TRACE_ENTRY_POINT
+ TInt count = NULL;
+ for (TInt i = 0; i < iCalendarStatus.Count(); i++)
+ {
+ if (iCalendarStatus[i])
+ {
+ count++;
+ }
+ }TRACE_EXIT_POINT;
+ return count;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::StoreCalEntryL
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+void CMultiCalUiDialogModel::StoreCalEntryL()
+ {
+ TRACE_ENTRY_POINT
+ //Create copy for entires.
+ RPointerArray<CCalEntry> copyEntries;
+ //Store the copy into calendars
+ for (TInt i = 0; i < iCalEntryViewArray.Count(); i++)
+ {
+ if (iCalendarStatus[i])
+ {
+ TInt numSuccess;
+ CreateCopyL(copyEntries);
+ iCalEntryViewArray[i]->StoreL(copyEntries, numSuccess);
+ copyEntries.ResetAndDestroy();
+ }
+ }
+
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::CreateCopyL
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+void CMultiCalUiDialogModel::CreateCopyL(
+ RPointerArray<CCalEntry>& aCalCopyEntries)
+ {
+ TRACE_ENTRY_POINT;
+
+ CleanupResetAndDestroyPushL(aCalCopyEntries);
+ for (TInt i = 0; i < iCalEntries.Count(); i++)
+ {
+ const CCalEntry* sourceEntry = iCalEntries[i];
+
+ HBufC8* guid = iInterimUtils->GlobalUidL();
+ CleanupStack::PushL(guid);
+
+ CCalEntry* copyEntry = CCalEntry::NewL(sourceEntry->EntryTypeL(),
+ guid, CCalEntry::EMethodNone, 0);
+
+ CleanupStack::Pop(guid); // ownership was passed
+ CleanupStack::PushL(copyEntry);
+
+ sourceEntry->DescriptionL(); // make sure entry is fully loaded
+ copyEntry->CopyFromL(*sourceEntry, CCalEntry::EDontCopyId);
+ copyEntry->DescriptionL(); // make sure entry is fully copied
+
+ aCalCopyEntries.AppendL(copyEntry);
+
+ CleanupStack::Pop(copyEntry);
+ }
+ CleanupStack::Pop(&aCalCopyEntries);
+ TRACE_EXIT_POINT;;
+ }
+
+// ----------------------------------------------------------------------------
+// CMultiCalUiDialogModel::GetAllCalendarInfoL
+// Rest of the details are commented in header.
+// ----------------------------------------------------------------------------
+//
+void CMultiCalUiDialogModel::GetAllCalendarInfoL(RPointerArray<
+ CCalCalendarInfo>& aCalendarInfoList)
+ {
+ TRACE_ENTRY_POINT
+
+ if (!iCalendarsSession)
+ {
+ iCalendarsSession = CCalSession::NewL();
+ }
+ CCalCalendarIterator* calIter = CCalCalendarIterator::NewL(
+ *iCalendarsSession);
+ CleanupStack::PushL(calIter);
+
+ for( CCalCalendarInfo* calendarInfo = calIter->FirstL();
+ calendarInfo!=NULL;calendarInfo = calIter->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)
+ {
+ aCalendarInfoList.Append(calendarInfo);
+ }
+ else
+ {
+ delete calendarInfo;
+ }
+ }
+ CleanupStack::PopAndDestroy(calIter);
+
+ TRACE_EXIT_POINT;
+ }
+
+// end of file