diff -r 000000000000 -r f979ecb2b13e pimappservices/calendar/client/src/calsession.cpp --- /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 + +#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 + }