calendarengines/caldav/src/caldavenginemgr.cpp
branchRCL_3
changeset 31 97232defd20e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarengines/caldav/src/caldavenginemgr.cpp	Tue Sep 14 21:17:03 2010 +0300
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2010 Sun Microsystems, Inc. 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 Contributor:
+* Maximilian Odendahl
+*
+* Contributors:
+* 
+* Description: provides a manager to keep track of all available engines
+*
+*/
+
+#include "caldavenginemgr.h"
+#include "caldavengine.h"
+
+#include <calsession.h>
+#include <calcalendarinfo.h>
+#include "calenglobaldata.h"
+
+/**
+ * CCalDavEngineMgr::CCalDavEngineMgr()
+ * default constructor
+ */
+CCalDavEngineMgr::CCalDavEngineMgr()
+	{
+	}
+
+/**
+ * CCalDavEngineMgr::~CCalDavEngineMgr()
+ * default destructor
+ */
+CCalDavEngineMgr::~CCalDavEngineMgr()
+	{
+	for (TInt i = iEngines.Count() - 1; i >= 0; --i)
+		delete iEngines[i];
+	iEngines.Close();
+	}
+
+/**
+ * CCalDavEngineMgr::NewLC()
+ * first phase construction
+ */
+CCalDavEngineMgr* CCalDavEngineMgr::NewLC()
+	{
+	CCalDavEngineMgr* self = new (ELeave) CCalDavEngineMgr();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+/**
+ * CCalDavEngineMgr::NewL()
+ * first phase construction
+ */
+CCalDavEngineMgr* CCalDavEngineMgr::NewL()
+	{
+	CCalDavEngineMgr* self = CCalDavEngineMgr::NewLC();
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+/**
+ * CCalDavEngineMgr::Progress()
+ * progress callback
+ */
+void CCalDavEngineMgr::Progress(TInt /*aPercentageCompleted*/)
+	{
+	}
+
+/**
+ * CCalDavEngineMgr::Completed()
+ * completed callback
+ */
+void CCalDavEngineMgr::Completed(TInt /*aError*/)
+	{
+	}
+
+/**
+ * CCalDavEngineMgr::NotifyProgress()
+ * NotifyProgress callback
+ */
+TBool CCalDavEngineMgr::NotifyProgress()
+	{
+	return EFalse;
+	}
+
+/**
+ * CCalDavEngineMgr::ConstructL()
+ * second phase construction
+ * check all calendar files, for each one which has caldav sync enabled, 
+ * create a CCalDavengine and enable sync
+ */
+void CCalDavEngineMgr::ConstructL()
+	{
+	RPointerArray<CCalCalendarInfo> calendarInfoList;
+	CCalenGlobalData* data = CCalenGlobalData::NewL(*this);
+	data->InitializeGlobalDataL();
+	CleanupStack::PushL(data);
+	data->GetAllCalendarInfoL(calendarInfoList);
+	CleanupClosePushL(calendarInfoList);
+
+	for (TInt i = 0; i < calendarInfoList.Count(); i++)
+		{
+		CDesC8Array* propertyKeys = calendarInfoList[i]->PropertyKeysL();
+		CleanupStack::PushL(propertyKeys);
+		TInt pos = 0;
+		if (propertyKeys->Find(KCaldavEnabled, pos, ECmpNormal) == KErrNone)
+			{
+			CCalDavEngine* engine = CCalDavEngine::NewL(
+					calendarInfoList[i]->FileNameL());
+			iEngines.Append(engine);
+			if (engine->EnabledSync())
+				engine->EnableL();
+			}
+		CleanupStack::PopAndDestroy(propertyKeys);
+		}
+	CleanupStack::PopAndDestroy(&calendarInfoList);
+	CleanupStack::PopAndDestroy(data);
+	}
+
+/**
+ * CCalDavEngineMgr::FindEngineL()
+ * find engines inside engine array, create if neccessary
+ */
+TInt CCalDavEngineMgr::FindEngineL(const TDesC &aName, TBool aCreate)
+	{
+	CCalSession* session = CCalSession::NewL();
+	TRAPD(error,session->OpenL(aName));
+	delete session;
+	if (error != KErrNone)
+		return KErrNotFound;
+		
+	for (TInt i = 0; i <= iEngines.Count() - 1; i++)
+		{
+		if (iEngines[i]->CalendarName() == aName)
+			return i;
+		}
+
+	if (aCreate)
+		{
+		iEngines.Append(CCalDavEngine::NewL(aName));
+		return iEngines.Count() - 1;
+		}
+	else
+		return KErrNotFound;
+	}
+
+/**
+ * CCalDavEngineMgr::SyncL()
+ * sync specific calendar
+ */
+TInt CCalDavEngineMgr::SyncL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	if (pos != KErrNotFound)
+		return iEngines[pos]->SyncL();
+	else
+		return KErrNotFound;
+	}
+
+/**
+ * CCalDavEngineMgr::SyncAllL()
+ * sync all calendars
+ */
+TInt CCalDavEngineMgr::SyncAllL()
+	{
+	// sync all caldav enabled calendars
+	for (TInt i = 0; i <= iEngines.Count() - 1; i++)
+		iEngines[i]->SyncL();
+	return KErrNone;
+	}
+
+/**
+ * CCalDavEngineMgr::DisableL()
+ * 
+ */
+TInt CCalDavEngineMgr::DisableL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+
+	if (pos != KErrNotFound)
+		iEngines[pos]->DisableL();
+
+	return pos == KErrNotFound ? KErrNotFound : KErrNone;
+	}
+
+/**
+ * CCalDavEngineMgr::EnableL()
+ * 
+ */
+TInt CCalDavEngineMgr::EnableL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	if (pos != KErrNotFound)
+		{
+		return iEngines[pos]->EnableL();
+		}
+
+	return KErrArgument;
+	}
+
+/**
+ * CCalDavEngineMgr::UrlL()
+ * 
+ */
+TPtrC8 CCalDavEngineMgr::UrlL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return (pos != KErrNotFound) ? iEngines[pos]->Url() : KNullDesC8();
+	}
+
+/**
+ * CCalDavEngineMgr::SetUrlL()
+ * 
+ */
+void CCalDavEngineMgr::SetUrlL(const TDesC &aCalendar, const TDesC8 &aUrl)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetUrlL(aUrl);
+	}
+
+/**
+ * CCalDavEngineMgr::UsernameL()
+ * 
+ */
+TPtrC8 CCalDavEngineMgr::UsernameL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return (pos != KErrNotFound) ? iEngines[pos]->User() : KNullDesC8();
+	}
+
+/**
+ * CCalDavEngineMgr::SetUsernameL()
+ * 
+ */
+void CCalDavEngineMgr::SetUsernameL(const TDesC &aCalendar,
+		const TDesC8 &aUsername)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetUserL(aUsername);
+	}
+
+/**
+ * CCalDavEngineMgr::PasswordL()
+ * 
+ */
+TPtrC8 CCalDavEngineMgr::PasswordL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return (pos != KErrNotFound) ? iEngines[pos]->Password() : KNullDesC8();
+	}
+
+/**
+ * CCalDavEngineMgr::SetPasswordL()
+ * 
+ */
+void CCalDavEngineMgr::SetPasswordL(const TDesC &aCalendar,
+		const TDesC8 &aPassword)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetPasswordL(aPassword);
+	}
+
+/**
+ * CCalDavEngineMgr::SyncIntervalL()
+ * 
+ */
+TTimeIntervalMinutes CCalDavEngineMgr::SyncIntervalL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return (pos != KErrNotFound) ? iEngines[pos]->SyncInterval()
+			: TTimeIntervalMinutes(DEFAULT_SYNC_MINUTES);
+	}
+
+/**
+ * CCalDavEngineMgr::SetSyncIntervalL()
+ * 
+ */
+void CCalDavEngineMgr::SetSyncIntervalL(const TDesC &aCalendar,
+		TTimeIntervalMinutes aSyncInterval)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetSyncIntervalL(aSyncInterval);
+	}
+
+/**
+ * CCalDavEngineMgr::PastDaysL()
+ * 
+ */
+TTimeIntervalDays CCalDavEngineMgr::PastDaysL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return (pos != KErrNotFound) ? iEngines[pos]->PastDays()
+			: TTimeIntervalDays(DEFAULT_PAST_DAYS);
+	}
+
+/**
+ * CCalDavEngineMgr::SetPastDaysL()
+ * 
+ */
+void CCalDavEngineMgr::SetPastDaysL(const TDesC &aCalendar,
+		TTimeIntervalDays aDays)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetPastDaysL(aDays);
+	}
+
+/**
+ * CCalDavEngineMgr::ImmediateSyncL()
+ * 
+ */
+TBool CCalDavEngineMgr::ImmediateSyncL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return pos != KErrNotFound ? iEngines[pos]->ImmediateSync()
+			: DEFAULT_IMMEDIATE_SYNC;
+	}
+
+/**
+ * CCalDavEngineMgr::SetImmediateSyncL()
+ * 
+ */
+void CCalDavEngineMgr::SetImmediateSyncL(const TDesC &aCalendar,
+		TBool aImmediateSyc)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetImmediateSyncL(aImmediateSyc);
+	}
+
+/**
+ * CCalDavEngineMgr::KeepServerEntryL()
+ * 
+ */
+TBool CCalDavEngineMgr::KeepServerEntryL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return pos != KErrNotFound ? iEngines[pos]->KeepServerEntry()
+			: DEFAULT_KEEP_SERVER_ENTRY;
+	}
+
+/**
+ * CCalDavEngineMgr::SetKeepServerEntryL()
+ * 
+ */
+void CCalDavEngineMgr::SetKeepServerEntryL(const TDesC &aCalendar,
+		TBool aKeepServerEntry)
+	{
+	TInt pos = FindEngineL(aCalendar, ETrue);
+	if (pos != KErrNotFound)
+		iEngines[pos]->SetKeepServerEntryL(aKeepServerEntry);
+	}
+
+/**
+ * CCalDavEngineMgr::EnabledSyncL()
+ * 
+ */
+TBool CCalDavEngineMgr::EnabledSyncL(const TDesC &aCalendar)
+	{
+	TInt pos = FindEngineL(aCalendar);
+	return (pos != KErrNotFound) ? iEngines[pos]->EnabledSync() : EFalse;
+	}