pimappservices/calendar/client/src/calsession.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/client/src/calsession.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,520 @@
+// Copyright (c) 2005-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:
+//
+
+#include <calsession.h>
+
+#include "calsessionimpl.h"
+
+CCalSession::CCalSession()
+	{
+	}
+
+void CCalSession::ConstructL()
+	{
+	iImpl = CCalSessionImpl::NewL();
+	}
+
+CCalSessionImpl& CCalSession::Impl() const
+	{
+	return *iImpl;
+	}
+
+/** Allocates and constructs a session to the Calendar server.
+@publishedAll
+@released
+@capability None
+
+@return Pointer to the newly created session.
+*/
+EXPORT_C CCalSession* CCalSession::NewL()
+	{
+	CCalSession* self = new (ELeave) CCalSession();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/** Destructor for the session. Clear away any resources.
+@publishedAll
+@released
+@capability None
+*/
+EXPORT_C CCalSession::~CCalSession()
+	{
+	delete iImpl;
+	}
+
+/** Creates a new calendar file.
+@leave KErrNotReady If the calendar file is on a drive where the media has been removed.
+@publishedAll
+@released
+@capability WriteUserData
+
+@param aFileName The name of the file to create. This is a combination of drive letter 
+and file name, in other words, DriveLetter:FileName, but not a full path. 
+
+It leaves if the file with the name specified already exists.
+*/
+EXPORT_C void CCalSession::CreateCalFileL(const TDesC&  aFileName) const
+	{
+	iImpl->CreateCalFileL(aFileName);
+	}
+
+/** Creates a new calendar file.
+@leave KErrNotReady If the calendar file is on a drive where the media has been removed.
+@publishedAll
+@released
+@capability WriteUserData
+
+@param aFileName The name of the file to create. This is a combination of drive letter 
+and file name, in other words, DriveLetter:FileName, but not a full path. 
+
+@param aCalendarInfo The calendar info to set on the file.
+
+It leaves if the file with the name specified already exists.
+*/
+EXPORT_C void CCalSession::CreateCalFileL(const TDesC& aFileName, const CCalCalendarInfo& aCalendarInfo) const
+    {
+    iImpl->CreateCalFileL(aFileName, aCalendarInfo);
+    }
+
+/** Set calendar info on the currently open calendar file.
+@leave KErrNotReady If there is no calendar file open on this CCalSession.
+@publishedAll
+@released
+@capability WriteUserData
+
+@param aCalendarInfo The calendar info to set on the file.
+*/
+EXPORT_C void CCalSession::SetCalendarInfoL(const CCalCalendarInfo& aCalendarInfo) const
+    {
+    iImpl->SetCalendarInfoL(aCalendarInfo);
+    }
+
+/** Get calendar info on the currently open calendar file.
+@leave KErrNotReady If there is no calendar file open on this CCalSession.
+@publishedAll
+@released
+@capability ReadUserData
+
+@return The calendar file's calendar info.  If none has been set on the
+file, CCalCalendarInfo::IsValid will return EFalse. 
+*/
+EXPORT_C CCalCalendarInfo* CCalSession::CalendarInfoL() const
+    {
+    return iImpl->CalendarInfoL();
+    }
+
+/** Opens an calendar file using the server. 
+
+If another agenda file is open in the same server session, it is closed. 
+@publishedAll
+@released
+@capability ReadUserData
+
+@leave KErrEof If the calendar file is corrupt and cannot be opened because an unexpected end of file was reached.
+@leave KErrInUse If there is an undeleted view, entry or instance from the file opened with this calendar session. 
+These must all be deleted before a new file can be opened.
+@leave KErrNotFound If the file has not been created. Call CCalSession::CreateCalFileL to create the file.
+@leave KErrCorrupt If the calendar file is corrupt and cannot be opened.
+@leave KErrNotSupported If the file name is not specified in the format DriveLetter:FileName.
+@leave KErrNotSupported If the file is not a supported version. The parameter aFileSupportStatus will be set to EUnsupportedFileVersion in this case.
+@leave KErrNotReady If the calendar file is on a drive where the media has been removed.
+
+@param aFileName The agenda file to open. This is a combination of drive letter 
+and file name, in other words, DriveLetter:FileName, but not a full path. It 
+leaves if a path is included explicitly. A default file is opened if aFileName is KNullDesC. 
+*/
+EXPORT_C void CCalSession::OpenL(const TDesC& aFileName) const
+	{
+	CalCommon::TCalFileVersionSupport status;
+	iImpl->OpenL(aFileName,status);
+	}
+
+/** Opens a calendar file using the server. 
+
+If another calendar file is open in the same server session, it is closed. 
+@param aFileName The agenda file to open. This is a combination of drive letter and file name, 
+in other words, DriveLetter:FileName, but not a full path. The default file is opened if aFileName is KNullDesC.
+@param aFileSupportStatus On return indicates whether or not the calendar file needs to be converted from an 
+older version. File conversion takes place when opening the first instance view or entry view.
+
+@leave KErrEof If the calendar file is corrupt and cannot be opened because an unexpected end of file was reached.
+@leave KErrInUse If there is an undeleted view, entry or instance from the file opened with this calendar session. 
+These must all be deleted before a new file can be opened.
+@leave KErrNotFound If the file has not been created. Call CCalSession::CreateCalFileL to create the file.
+@leave KErrCorrupt If the calendar file is corrupt and cannot be opened.
+@leave KErrNotSupported If the file name is not specified in the format DriveLetter:FileName.
+@leave KErrNotSupported If the file is not a supported version. The parameter aFileSupportStatus will be set to EUnsupportedFileVersion in this case.
+@leave KErrNotReady If the calendar file is on a drive where the media has been removed.
+Otherwise one of the system wide error codes.
+
+@pre The file to be opened has been created.
+@post The file has been opened and it is now possible to build an entry view or instance view. If the file requires conversion, the
+conversion will take place while building the view.
+@publishedPartner
+@released
+@capability ReadUserData
+*/
+EXPORT_C void CCalSession::OpenL(const TDesC& aFileName, CalCommon::TCalFileVersionSupport& aFileSupportStatus) const
+	{
+	iImpl->OpenL(aFileName, aFileSupportStatus);
+	}
+
+/**
+Gets the name of the default calendar file held by the server. 
+@publishedAll
+@released
+@capability None
+
+@return The default filename. This is a combination of a drive letter and a file name, in other 
+words, DriveLetter:FileName but not a full path. 
+*/
+EXPORT_C const TDesC& CCalSession::DefaultFileNameL() const
+	{
+	return iImpl->DefaultFileNameL();
+	}
+
+/** Deletes a calendar file with the supplied filename. 
+If the file is opened, it will be closed first
+
+This also deletes all calendar attachment files referenced from this calendar store - these are the
+ones moved when the calendar has taken ownership of the file through the CCalAttachment::NewL APIs.
+Attachment files stored on a different drive to the calendar file will not be deleted.
+
+@publishedAll
+@released
+
+@capability WriteUserData
+@param aFileName The combination of drive letter and file name, in other 
+words, DriveLetter:FileName, but not a full path 
+
+@leave KErrNotSupported aFileName includes a path explicitly.
+@leave KErrNotFound The agenda file has not been found.
+@leave KErrBadArgument The length of aFileName is zero.
+@leave KErrInUse One of the attachment file handles from this calendar store is still open.
+@leave KErrNotReady If the calendar file is on a drive where the media has been removed.
+*/
+EXPORT_C void CCalSession::DeleteCalFileL(const TDesC& aFileName) const
+	{
+	iImpl->DeleteCalFileL(aFileName);
+	}
+
+/** Gets a list of all calendar files held by the server.
+The caller takes ownership of the returned descriptor array.
+@publishedAll
+@released
+@capability None
+
+@return A list of filenames of the Agenda files held by the server.
+This is NULL if no file has been found.
+
+Note that:
+- The calendar files can be stored on any drive.
+- Since the directories are not seen by clients, the filenames returned are a 
+combination of drive letter and file name, in other words DriveLetter:FileName
+- The files are ordered alphabetically by drive letter. Files on the same drive 
+are ordered by filename, for instance a:agenda, c:agenda, c:calendar, d:agenda, d:calendar.
+*/
+EXPORT_C CDesCArray* CCalSession::ListCalFilesL() const
+	{
+	return iImpl->ListCalFilesL();
+	}
+
+/** Start notification of any changes to calendar entries. 
+These changes can be filtered, and when a change occurs the MCalChangeCallBack callback function is called
+with the type of entry which has changed (event or todo).
+
+@param aCallBack The class to notify when a change occurs.
+@param aChangeEntryType Filter notifications to only notify on entries of the specified type (event/todo/all).
+@param aIncludeUndatedTodos Filter notifications to include undated todos.
+@param aFilterStartTime Filter notification to only include entries that are wholly or partly covered by a time range. 
+This specifies the start time of the time range.
+@param aFilterEndTime Filter notification to only include entries that are wholly or partly covered by a time range. 
+This specifies the end time of the time range.
+@publishedAll
+@deprecated
+@capability None
+*/
+EXPORT_C void CCalSession::StartChangeNotification(MCalChangeCallBack* aCallBack, MCalChangeCallBack::TChangeEntryType aChangeEntryType, TBool aIncludeUndatedTodos, TTime aFilterStartTime, TTime aFilterEndTime)
+	{
+	TRAP_IGNORE(iImpl->StartChangeNotificationL(aCallBack, aChangeEntryType, aIncludeUndatedTodos, aFilterStartTime, aFilterEndTime));
+	}
+	
+/** Start notification of any changes to calendar entries. 
+These changes can be filtered, and when a change occurs the MCalChangeCallBack2 callback function is called
+with details about the entry which has changed (TCalLocalUid and entry type) and the type of change (add/delete/modify).
+
+@param aCallBack The class to notify when a change occurs.
+@param aFilter Filter notifications to only notify on certain types of entries.
+@publishedAll
+@released
+@capability None
+*/
+EXPORT_C void CCalSession::StartChangeNotification(MCalChangeCallBack2& aChangeObserver, const CCalChangeNotificationFilter& aFilter)
+	{
+	TRAP_IGNORE(iImpl->StartChangeNotificationL(aChangeObserver, aFilter));
+	}
+
+/** Start notification of changes to calendar files. 
+When a change occurs, the MCalFileChangeObserver callback function is called
+with change types (see MCalFileChangeObserver::TChangeType) about the files.
+
+@param aCallBack The class to notify when a change occurs.
+@publishedAll
+@prototype
+@capability None
+*/
+EXPORT_C void CCalSession::StartFileChangeNotificationL(MCalFileChangeObserver& aCallBack)
+    {
+    iImpl->StartFileChangeNotificationL(aCallBack);
+    }
+
+/** Stop file change notification from this session.
+@publishedAll
+@released
+@capability None
+*/  
+EXPORT_C void CCalSession::StopFileChangeNotification()
+    {
+    iImpl->StopFileChangeNotification();  
+    }
+
+/** Stop entry notifications from this session.
+@publishedAll
+@released
+@capability None
+*/	
+EXPORT_C void CCalSession::StopChangeNotification()
+	{
+	iImpl->StopChangeNotification();
+	}
+
+/** Disable all notifications from changes made within this session. 
+Changes made within other sessions will still be notified. This can be done before a bulk operation, 
+to prevent a large number of notifications from appearing.
+Note that this call does not disable publish and subscribe notifications. That must be done from DisablePubSubNotificationsL.
+@publishedAll
+@released
+@capability None
+*/
+EXPORT_C void CCalSession::DisableChangeBroadcast()
+	{
+	iImpl->DisableChangeBroadcast();
+	}
+
+/** Re-enable all notifications from changes made within this session.
+This function has the opposite effect of DisableChangeBroadcast.
+@publishedAll
+@released
+@capability None
+*/
+EXPORT_C void CCalSession::EnableChangeBroadcast()
+	{
+	iImpl->EnableChangeBroadcast();
+	}
+
+/** Gets the file ID of the currently open Calendar file. This is unique to the file. 
+@publishedAll
+@released
+@capability None
+@param aCalFileId On return will be the file ID of the currently open Calendar file. The file ID will be set to KNullFileId if the file is not opened.
+*/	
+EXPORT_C void CCalSession::FileIdL(TCalFileId& aCalFileId) const
+	{
+	iImpl->FileIdL(aCalFileId);
+	}
+
+/** Gets the Collection ID of the currently open Calendar file.
+Note that:
+
+ This ID should not be persisted because it is re-generated whenever the session is connected.
+ This ID identifies the same Calendar file as the file ID retrieved form CCalSession::FileIdL(TCalFileId& aCalFileId)
+
+@publishedAll
+@released
+@capability None
+@return Return the Collection ID of the currently open Calendar file, 0 if the file has not been opened.
+*/	
+EXPORT_C TCalCollectionId CCalSession::CollectionIdL() const
+	{
+	return iImpl->CollectionId();
+	}
+
+/** Simulates a heap allocation failure for the server-side heap. Debug only.
+
+The failure occurs on subsequent calls to new or any of the functions which
+allocate memory from the server-side heap.
+
+The timing of the allocation failure depends on the type of
+allocation failure requested, i.e. on the value of aFail.
+
+The simulation of heap allocation failure is cancelled
+if aFail is given the value RAllocator::ENone.
+
+Notes:
+
+1. If the failure type is RAllocator::EFailNext, the next attempt to allocate from
+   the server-side heap fails; however, no further failures will occur.
+	
+2. For failure types RAllocator::EFailNext and RAllocator::ENone, set aRate to 1.
+
+@test
+@param aFail An enumeration which indicates how to simulate heap allocation failure.
+@param aRate The rate of failure; when aType is RAllocator::EDeterministic, heap allocation fails every aRate attempt.
+@pre There is an open calendar session.
+@post The calendar server will fail memory allocation at the specified point.
+@released
+@publishedPartner
+*/
+#ifdef _DEBUG
+EXPORT_C void CCalSession::_DebugSetHeapFailL(RAllocator::TAllocFail aFail, TInt aRate)
+	{
+	iImpl->_DebugSetHeapFailL(aFail, aRate);
+	}
+#else
+EXPORT_C void CCalSession::_DebugSetHeapFailL(RAllocator::TAllocFail /*aFail*/, TInt /*aRate*/)
+	{
+	}
+#endif
+	
+/** Gets the total number of cells allocated on the server-side heap. Debug only.
+@test
+@return The number of cells allocated on the heap.
+@pre There is an open calendar session.
+@post None
+@released
+@publishedPartner
+*/
+EXPORT_C TInt CCalSession::_DebugRequestAllocatedCellsL()
+	{
+#ifdef _DEBUG
+	return iImpl->_DebugRequestAllocatedCellsL();
+#else
+	return 0;
+#endif
+	}
+
+/** Enable Publish and Subscribe notifications for changes made by this client only.
+@publishedAll
+@released
+@capability None
+*/	
+EXPORT_C void CCalSession::EnablePubSubNotificationsL()
+	{
+	iImpl->EnablePubSubNotificationsL();
+	}
+	
+/** Disable Publish and Subscribe notifications for changes made by this client only.
+@publishedAll
+@released
+@capability None
+*/	
+EXPORT_C void CCalSession::DisablePubSubNotificationsL()
+	{
+	iImpl->DisablePubSubNotificationsL();
+	}
+
+/** Retrieve a calendar file name from its hash value. 
+The hash value comes from the Publish and Subscribe CalInterimAPI data in TCalPubSubData.
+@publishedAll
+@released
+@capability None
+@param aPubSubData The publish and subscribe data.
+@param aFileName On return will be the full file name.
+*/	
+EXPORT_C void CCalSession::GetFileNameL(TCalPubSubData aPubSubData, TDes& aFileName) const
+	{
+	iImpl->GetFileNameL(aPubSubData, aFileName);
+	}
+	
+/** Test if the full file name passed is the one that was changed. 
+@publishedAll
+@released
+@return ETrue if the full file name passed is the one that was changed, EFalse if not.
+@capability None
+@param aPubSubData The publish and subscribe data.
+@param aFileName The full file name to test.
+*/	
+EXPORT_C TBool CCalSession::IsFileNameL(TCalPubSubData aPubSubData, const TDesC& aFileName) const
+	{
+	return iImpl->IsFileNameL(aPubSubData, aFileName);
+	}
+	
+/** Test if the publish and subscribe data relates to the currently open calendar file. 
+@publishedAll
+@released
+@return ETrue if the publish and subscribe data relates to the currently open calendar file, EFalse if not.
+@capability None
+@param aPubSubData The publish and subscribe data.
+*/	
+EXPORT_C TBool CCalSession::IsOpenedFileL(TCalPubSubData aPubSubData) const
+	{
+	return iImpl->IsOpenedFileL(aPubSubData);
+	}
+
+void CCalSession::ConstructL(CCalSession& aCalSession)
+	{
+	iImpl = CCalSessionImpl::NewL(aCalSession.Impl());
+	}
+
+/** Allocates and constructs a session to the Calendar server
+
+@pre At least one object of CalSession has been created (which means a connection to server has been established).
+
+@publishedAll
+@released
+@capability None
+@param aCalSession A reference to CalSession which is created beforehand.
+@return Pointer to the newly created session which shares the handle to the Calendar server with aCalSession.
+*/
+EXPORT_C CCalSession* CCalSession::NewL(CCalSession& aCalSession)
+	{
+	CCalSession* self = new (ELeave) CCalSession();
+	CleanupStack::PushL(self);
+	self->ConstructL(aCalSession);
+	CleanupStack::Pop(self);
+	return self;
+	}
+/** Clears timezone information cached at client side.
+This API should be used for debug purpose.
+@internalComponent
+@released
+@capability None
+@param aRestartCaching Set to ETrue if caching needs to be restarted after clearing current cache.
+*/	
+#if defined(_DEBUG)
+
+EXPORT_C void CCalSession::__dbgClearTzClientCacheL(TBool aRestartCaching)
+	{
+	iImpl->__dbgClearTzClientCacheL(aRestartCaching);
+	}
+	
+#else
+
+EXPORT_C void CCalSession::__dbgClearTzClientCacheL(TBool /*aRestartCaching*/)	{}
+
+#endif
+
+
+EXPORT_C TInt CCalSession::_DebugRequestAllocatedHeapSizeL()
+	{
+#ifdef _DEBUG
+	return iImpl->_DebugRequestAllocatedHeapSizeL();
+#else
+	return 0;
+#endif
+	}