diff -r 000000000000 -r f979ecb2b13e calendarui/globaldata/inc/calenglobaldata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/globaldata/inc/calenglobaldata.h Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,492 @@ +/* +* Copyright (c) 2002-2005 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: Global Data for Calendar application +* +*/ + + +#ifndef CALENGLOBALDATA_H +#define CALENGLOBALDATA_H + +// INCLUDES +#include +#include +#include // MMRUtilsObserver +#include +#include // MCalenNotificationHandler +#include // Calendar database session +#include // Calendar Instance view +#include // Calendar Entry view +#include //RHashSet + +#include + + +// FORWARD DECLARATIONS +class CMRMailboxUtils; // Mailbox utilities +class CCalSession; // Calendar session +class CCalEntryView; // Calendar entry view +class CCalInstanceView; // Calendar instance view +class CCalenInterimUtils2; // Provides helper functions to CalInterimApi +class CCalenSend; // Sending interface +class CCalenDbChangeNotifier; // Issues notifications of database changes +class MCalenContextChangeObserver; // Context changes +struct TKeyEvent; +class CCalenContextImpl; // context implementation +class MCalenContext; +class CCalenFileMapping; +class CCalenInfo; +class CCalCalendarInfo; + +// CLASS DECLARATION + +/** +* CCalenGlobalData is a singleton using Thread local storage +* It provides easy access to instances of the following classes: +* CMRMailboxUtils +* CMRUtils +* CCalSession +* CCalInstanceView +* CCalEntryView +* CCalenInterimUtils2 +* CCalenSend +* CCalenDbChangeNotifier +* CCalenContext +*/ +NONSHARABLE_CLASS(CCalenGlobalData) : public CBase, + public MMRUtilsObserver, + public MCalenNotificationHandler + { + public: // Constructors and destructor + /** + * The only classes that should call NewL are the controller + * and server classes. Otherwise use InstanceL. + * Doesn't take ownership of aNotifier. + */ + IMPORT_C static CCalenGlobalData* + NewL( MCalProgressCallBack& aCalCallBack, + MCalenContextChangeObserver* aNotifier=NULL ); + + /** + * Constructor. Returns a new instance of CCalenGlobalData if + * none exists, or returns the existing instance. + * @return CCalenGlobalData pointer + */ + IMPORT_C static CCalenGlobalData* InstanceL(); + + /** + * Constructs CCalenGlobalData with an existing CCalSession. It + * is the responsibility of the caller to ensure that the session + * remains open until ALL references to the CCalenGlobalData have been + * released. If the CCalenGlobalData already has created a different + * CCalSessionthis call will leave with KErrAlreadyExists. If the + * CCalenGlobalData has previously been initialised with the same + * external CCalSession, the existing instance will be returned. + * @param aSession initialised calendar session + * @return CCalenGlobalData pointer + */ + IMPORT_C static CCalenGlobalData* InstanceL(CCalSession& aSession); + + /** + * Non-leaving version of constructor. Returns an instance of + * CCalenGlobalData if one exists or NULL otherwise + */ + IMPORT_C static CCalenGlobalData* Instance(); + + /** + * CCalenGlobalData is a reference counting singleton. Call Release() + * when you are done with it, it will clean itself up when it needs to + */ + IMPORT_C void Release(); + + public: // New functions + + /** + * Returns a reference to the mailbox utils + * @return reference to a CMRMailboxUtils + */ + IMPORT_C CMRMailboxUtils& MRMailboxUtilsL(); + + /** + * Returns a reference to the mr utils + * @return reference to a CMRUtils + */ + IMPORT_C CMRUtils& MeetingRequestUtilsL(); + + /** + * Returns a reference to the calendar session + * @return reference to a CCalSession + */ + IMPORT_C CCalSession& CalSessionL(); + + /** + * Returns a reference to the calendar session + * @param aCalendar filename for which session to be returned + * @return reference to a CCalSession from array of sessions + */ + IMPORT_C CCalSession& CalSessionL(const TDesC& aCalendar); + + /** + * Returns a pointer to the calendar instance view + * if it has been constructed otherwise it + * returns NULL and constructs the instance view + * asynchronously. + * @return pointer to a CCalInstanceView + */ + IMPORT_C CCalInstanceView* InstanceViewL(); + + /** + * Returns a pointer to the calendar instance view + * if it has been constructed otherwise it + * returns NULL and constructs the instance view + * asynchronously. + * @param aCollectionIds array of collection ids for which we need to + * create the instanceview + * @return pointer to a CCalInstanceView + */ + IMPORT_C CCalInstanceView* InstanceViewL( + const RArray& aCollectionIds ); + + /** + * Returns a pointer to the calendar entry view + * if it has been constructed otherwise it + * returns NULL and constructs the entry view + * asynchronously. + * @return pointer to a CCalEntryView + */ + IMPORT_C CCalEntryView* EntryViewL(); + + /** + * Returns a pointer to the calendar entry view + * if it has been constructed otherwise it + * returns NULL and constructs the entry view + * asynchronously. + * @param aCollectionId collection id to which we need to create entryview + * @return pointer to a CCalEntryView + */ + IMPORT_C CCalEntryView* EntryViewL(const TCalCollectionId aCollectionId ); + + + /** + * Returns information does complete entry view exist + * @return ETrue if exists EFalse if does not exist. + */ + IMPORT_C TBool EntryViewExists(); + + /** + * Returns a reference to the interim utils + * @return reference to a CCalenInterimUtils2 + */ + IMPORT_C CCalenInterimUtils2& InterimUtilsL(); + + /** + * Returns a reference to the CCalenSend + * @return reference to a CCalenSend + */ + IMPORT_C CCalenSend& CalenSendL(); + + /** + * Returns information whether the default mailbox if retrieved + * @return ETrue if successful EFalse if not + */ + IMPORT_C TBool AttemptToRetrieveDefaultMailboxL( CMRMailboxUtils::TMailboxInfo& aDefaultMailbox); + + /** + * Returns information whether events if queued successfully + * @return ETrue if event is queued EFalse if it doesn't + */ + IMPORT_C TBool QueueKeyEvent(const TKeyEvent& aEvent, TEventCode aType); + + /** + * Returns information whether a keyevent is fetched successfully + * @return ETrue if a keyevent is retieved EFalse if no more queued events + */ + IMPORT_C TBool GetQueuedKeyEvent(TKeyEvent& aEvent, TEventCode& aType); + + /** + * Reset events queue + * @return void + */ + IMPORT_C void ResetKeyEventQueue(); + + /** + * Returns a reference to the calendar context + * @return reference to a CCalenContext + */ + IMPORT_C MCalenContext& Context(); + + + /* + * Initializes multiple db related objects + * @return void + */ + IMPORT_C void InitializeGlobalDataL(); + + /* + * Gets meta db id from collection id + * @param cColId collection id for which db id has to be returned + * @return TInt Db id for callection id + */ + IMPORT_C TInt GetDbIdFromCollectionIdL(const TCalCollectionId aColId ); + + /** + * @brief adds new calendar file and sets calendar info to it + * + * @param aCalendarInfo pointer to the calendar info which is being + * set to calsession + */ + IMPORT_C void AddCalendarL(CCalCalendarInfo* aCalendarInfo); + + /** + * @brief removes dead calendar files from the file system + */ + IMPORT_C void RemoveDeadCalendarsL(); + + /** + * @brief removes calendar file from the file system + * + * @param aCalendarFileName Name of the calendar file to be deleted. + */ + IMPORT_C void RemoveCalendarL(const TDesC& aCalendarFileName); + + /** + * @brief updated calendar info for the calendar file + * + * @param aCalendarInfo pointer to the calendar info which is being + * set to calsession + */ + IMPORT_C void UpdateCalendarL(CCalCalendarInfo* aCalendarInfo); + + /** + * @brief Get Calendar file name for the given collectionid + * + * @param cColId collection id for which db id has to be returned + * @param aCalendarFileName calendar file name + */ + IMPORT_C const TDesC& GetCalFileNameForCollectionId( + const TCalCollectionId aColId); + + /** + * @brief Get all available calendar info + * + * @param returns the list of available calendar info iterating + * through all calendars + */ + IMPORT_C void GetAllCalendarInfoL(RPointerArray& aCalendarInfoList); + + public: // from MMRUtilsObserver + void HandleCalEngStatus( TMRUtilsCalEngStatus aStatus ); + + public: // MCalenNotificationHandler + void HandleNotification( const TCalenNotification aNotification ); + + + private: // methods + /** + * Prompt the user to select their default meeting request mailbox. If the user cancels, + * the function returns KErrCancel, otherwise it returns the index of the newly + * 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. + * @param aMailboxes array of all the mailboxes currently available. + * @return KErrCancel if the user declined to set a default, otherwise the index + * in aMailboxes to which the default should be set + */ + TInt PromptToSelectDefaultMailboxL(RArray& aMailboxes); + + private: + /** + * C++ constructor. + * + */ + CCalenGlobalData( MCalProgressCallBack& aCalCallBack); + + /** + * By default Symbian 2nd phase constructor is private. + * Doesn't take ownership of aNotifier. + */ + void ConstructL( MCalenContextChangeObserver* aNotifier ); + + /** + * Private Destructor. Users of this class should call Release() instead + */ + ~CCalenGlobalData(); + + /** + * Sets the CCalenGlobalData to use an externally created CCalSession. + * Leaves with KErrAlreadyExists if a different session has already been + * created by the CCalenGlobalData + */ + void SetSessionL(CCalSession* aSession); + + /** + * Create entr yview + * @return void + */ + void CreateEntryViewL(); + + /** + * Create instanceview + * @return void + */ + void CreateInstanceViewL(); + + /** + * Create instanceview + * @param aCollectionIds array of collection ids instance view + * @return void + */ + void CreateInstanceViewL(const RArray& aCollectionIds); + + /** + * Handle clean up after entryview/ instanceview being created + * @param aSuccess status of completion of instamce/entry view + * @return void + */ + void ViewCreationCompleted( TBool aSuccess ); + + /* + * Create new session for calendar name + * @param aCalendar calendar filename + * @return referance to CCalSession + */ + CCalSession& CreateNewSessionL( const TDesC& aCalendar ); + + /* + * Create entry view for session + * @param session referance to CCalSession + * @return void + */ + void CreateEntryViewL(CCalSession& session); + + /* + * Constructs mapping between symbian calendar file and metabd info + * @return TBool status of construction + */ + TBool ConstructFileMappingL(); + + /* + * Find filemapping object based on calendar name + * @param aName calendar filename + * @param aFileMapping referance for RPointerArray find method. + * @return TBool find status + */ + static TBool CalenInfoIdentifierL( const HBufC* aName, + const CCalenFileMapping& aFileMapping); + + + /* + * Find CCalCalendarInfo object based on calendar filename + * @param aFileName pointer to filename. + * @param CCalCalendarInfo referance for RPointerArray find method. + * @return TBool find status + */ + static TBool CalenCalendarInfoIdentiferL(const HBufC* aFileName, + const CCalCalendarInfo& aCalendarInfo); + + /* + * @brief create new session for calendar name + * + * @param aCalendar calendar filename + * @return referance to CCalSession + */ + CCalSession& CreateNewSessionL( const TDesC& aCalendar, + const CCalCalendarInfo& aCalendarInfo ); + + /* + * @brief Find filemapping object based on collection id + * + * @param aCollectionId collection id + * @param aFileMapping referance for RPointerArray find method. + * @return TBool find status + */ + static TBool CalenFileMapIdentifierForColId(const TCalCollectionId* aId, + const CCalenFileMapping& aFileMapping ); + + /** + * @brief Construct calendarlist using calendar iterator + */ + void ConstructCalendarsListL(); + + /** + * @brief gets default calendar information + * + * @return CCalCalendarInfo returns pointer to default calendar info + */ + CCalCalendarInfo* GetDefaultCalendarInfoL(); + + /** + * @brief Handles the notification ECalenNotifyCalendarInfoCreated + * Adds a new calendar to the available calendar list in calendar app + */ + void HandleCalendarInfoCreatedL(); + + /** + * @brief Handles the notification ECalenNotifyCalendarInfoUpdated + * Updates a new calendar in the available calendar list in calendar app + */ + void HandleCalendarInfoUpdatedL(); + + /** + * @brief Handles the notification ECalenNotifyCalendarFileDeleted + * Deletes a calendar from the calendar list + */ + void HandleCalendarFileDeletedL(); + + private: + // Member data owned by this class. Member data is only initialised on first use + CActiveSchedulerWait* iUtilsAs; + CCalSession* iCalSession; + CCalEntryView* iEntryView; + CCalEntryView* iEntryViewCreation; + CCalInstanceView* iInstanceView; + CCalInstanceView* iInstanceViewCreation; + CCalSession* iNewCalSession; + CCalEntryView* iNewEntryView; + CCalEntryView* iNewEntryViewCreation; + CCalInstanceView* iNewInstanceView; + CCalInstanceView* iNewInstanceViewCreation; + CCalenInterimUtils2* iInterimUtils; + CCalenSend* iSend; + CCalenContextImpl* iContext; + CMRUtils* iMRUtils; + TInt iRefCount; + TInt iCreateError; + TBool iGlobalDataOwnsCalSession; + TBool iGlobalDataOwnsEntryView; + RPointerArray iFileMappingArray; + RHashMap iHashDbidIndexMap; + + //Only used if meeting request solution exists on device, otherwise NULL + CMRMailboxUtils* iMailboxUtils; + + struct TQueuedKeyEvent { + TKeyEvent iEvent; + TEventCode iType; + }; + + typedef void (CCalenGlobalData::*QueuedFunction)(); + QueuedFunction iQueued; + + // Not owned by class. Needed for entry and instance view + // creation. + MCalProgressCallBack& iCalCallBack; + RArray< TQueuedKeyEvent > iKeyQueue; + TBool iCalendarForcedExit; + CCalSession* iCalendarsSession; + RPointerArray iCalendarInfoList; + }; + +#endif // CALENGLOBALDATA_H + +// End of File