diff -r 000000000000 -r 094583676ce7 wvuing/wvuipresence/src/CCAPEngPresenceManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuipresence/src/CCAPEngPresenceManager.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,565 @@ +/* +* 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: Manager for presence operations (fetcher/notifier/publisher). +* +*/ + + +#ifndef CCAPENGPRESENCEMANAGER_H +#define CCAPENGPRESENCEMANAGER_H + +// INCLUDES +#include "CAPresenceDefinitions.h" +#include "TStorageManagerGlobals.h" +#include "MCAPresence.h" +#include "TCARequestQueue.h" +#include "MCASettings.h" +#include "SServerPrefers.h" +#include "TDecodeAttrParams.h" +#include "MCAPresenceUpdater.h" + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CPEngAttributeListTransaction; +class CPEngAttributeStore2; +class CPEngPresenceNotifier2; +class CPEngAttributeTransaction; +class MPEngPresenceAttrModel; +class MCASettings; +class CCAPEngListManager; +class CCAPresenceErrors; +class MCAStoredContacts; +class CPEngTrackedPresenceIDs2; +class MPEngPresenceAttrModel2; + +class MCAReactiveAuthObserver; +class MPEngAuthorizationRequest; +class MPEngAuthorizationStatus; +class CPEngReactAuthStore; +class CPEngReactAuthNotifier; +class CPEngReactAuthTransaction; +class CCAState; + +// CLASS DECLARATION + +/** + * Manager for presence-list operations + * + * @lib CAPresence.dll + * @since 2.1 + */ +class CCAPEngPresenceManager : public CBase, + public MCAPresence, + public MPEngPresenceObserver2, + public MPEngAttributeTransactionObserver2, + public MPEngReactAuthObserver, + public MPEngReactAuthTransactionObserver, + public MCAPresenceUpdater + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CCAPEngPresenceManager* NewL( + MCASettings* aApplicationSettings ); + + /** + * Destructor. + */ + virtual ~CCAPEngPresenceManager(); + + public: // New public methods + + /** + * Returns settings API handle + * @since 2.1 + * @return Settings API handle + */ + MCASettings* SettingsAPI() const; + + /** + * Sets setting API handle + * @since 2.1 + * @param aApplicationSettings Settings API handle + */ + void SetSettingsAPIL( MCASettings* aApplicationSettings ); + + public: // From MCAPresence + + /** + * @see MCAPresence + */ + void HandleNetworkStateL( TNetworkStatus aState, + const SServerPrefers& aServerPreferences, + CPEngNWSessionSlotID2* aSessionSlotID ); + + /** + * @see MCAPresence + */ + void HandleSettingsChangeL( TInt aChangedSettingEnum ); + + /** + * @see MCAPresence + */ + void SetPresenceObserver( MCAPresenceObserver* aObserver ); + + /** + * @see MCAPresence + */ + MCAPresenceObserver* PresenceObserver() const; + + /** + * @see MCAPresence + */ + void SetWatcherObserver( MCAWatcherObserver* aObserver ); + + /** + * @see MCAPresence + */ + void AddWatcherL( const TDesC& aWVId ); + + /** + * @see MCAPresence + */ + void RemoveWatcherL( const TDesC& aWVId ); + + /** + * @see MCAPresence + */ + void RefreshFriendsL(); + + /** + * @see MCAPresence + */ + void GetOnlineUsersL( const CDesCArray& aUserList, + CDesCArray* aOnlineList, + CDesCArray* aOfflineList, + TBool aUpdateStorage = EFalse ); + + /** + * @see MCAPresence + */ + void GetOnlineFriendsL( CDesCArray& aOnlineList, + TBool aFetchFromNetwork = EFalse ); + + /** + * @see MCAPresence + */ + void SubscribeFriendsL( const TSubscribeMode aMode ); + + /** + * @see MCAPresence + */ + MCAContactLists* ContactLists(); + + /** + * @see MCAPresence + */ + const CCAPresenceErrors& LastOperationResult() const; + + /** + * Cancel pending requests to network + */ + void CancelPendingRequests(); + + /** + * @see MCAPresence + */ + void SynchronizePresenceSettingsL( + const SServerPrefers& aServerPreferences ); + + /** + * @see MCAPresence + */ + HBufC* AliasL( const TDesC& aUserId ); + + /** + * @see MCAPresence + */ + HBufC* AliasL( MCAStoredContact* aContact ); + + /** + * @see MCAPresence + */ + void ChangeStatusL( TPresenceStatus aStatus ); + + /** + * @see MCAPresence + */ + TInt ChangeStatusL( TPresenceStatus aStatus, + const TDesC& aStatusMessage ); + + /** + * @see MCAPresence + */ + TInt ChangeStatusMessageL( const TDesC& aStatusMessage ); + + /** + * @see MCAPresence + */ + MCAPresence::TPresenceStatus StatusL(); + + /** + * @see MCAPresence + */ + void AddOwnPresenceStatusObserverL( MCAPresenceObserver* aObserver ); + + /** + * @see MCAPresence + */ + void InitializePresenceAPIL( CPEngNWSessionSlotID2& aSessionSlotID ); + + /** + * @see MCAPresence + */ + void AddAttributeL( TInt aAttribute ); + + /** + * @see MCAPresence + */ + void RemoveAttributeL( TInt aAttribute ); + + /** + * @see MCAPresence + */ + void ResetAttributesL( TBool aNotifyListManager /* = ETrue */ ); + + /** + * @see MCAPresence + */ + void UpdateAliasAttributeL(); + + /** + * @see MCAPresence + */ + void SetReactiveAuthObserver( MCAReactiveAuthObserver* aRAObserver ); + + /** + * @see MCAPresence + */ + void SendReactiveAuthResponseL( TInt aId, TBool aResponse ); + + /** + * @see MCAPresence + */ + TInt PendingRARequestCount(); + + /** + * @see MCAPresence + */ + TBool GetNextPendingRARequestL( TInt& aId, + TDes& aUserId, + TInt& aLastPos ); + + /** + * @see MCAPresence + */ + TInt RAStatusCount(); + + /** + * @see MCAPresence + */ + TBool GetNextRAStatusL( TInt& aId, TBool& aStatus, + TDes& aUserId, TInt& aLastPos ); + + /** + * @see MCAPresence + */ + void PostLoginRAFlushL(); + + private: // From MPEngAttributeTransactionObserver2 + + /** + * @see MPEngAttributeTransactionObserver2 + */ + void HandleAttributeTransactionError( + TInt aError, + CPEngAttributeTransaction2& aTransaction, + TInt aTransactionOperation ); + + /** + * @see MPEngAttributeTransactionObserver2 + */ + void HandleAttributeTransactionCompleteL( + MPEngTransactionStatus2& aStatus, + CPEngAttributeTransaction2& aTransaction, + TInt aTransactionOperation ); + + + private: // From MPEngPresenceObserver2 + + /** + * @see MPEngPresenceObserver2 + */ + void HandlePresenceChangeL( CPEngPresenceNotifier2& aNotifier, + CPEngTrackedPresenceIDs2& aChangedPresenceIDs ); + + /** + * @see MPEngPresenceObserver2 + */ + void HandlePresenceError( TInt aError, + CPEngPresenceNotifier2& aNotifier ); + + public: // from MPEngReactAuthObserver + + // @see MPEngReactAuthObserver + void HandlePendingAuthorizationReqL( + CPEngReactAuthNotifier& aNotifier, + TArray< MPEngAuthorizationRequest* >& aPendingAuthReqs ); + + // @see MPEngReactAuthObserver + void HandlerAuthorizationStatusL( + CPEngReactAuthNotifier& aNotifier, + TArray< const MPEngAuthorizationStatus* > aAuthStatuses ); + + // @see MPEngReactAuthObserver + void HandleReactAuthError( + TInt aError, + CPEngReactAuthNotifier& aNotifier ); + + private: // from MPEngReactAuthTransactionObserver + + void HandleReactAuthTransactionCompleteL( + MPEngTransactionStatus2& aStatus, + CPEngReactAuthTransaction& aTransaction, + TInt aTransactionOperation ); + + void HandleReactAuthTransactionError( + TInt aError, + CPEngReactAuthTransaction& aTransaction, + TInt aTransactionOperation ); + + private: // From MCAPresenceUpdater + + /** + * @see MCAPresenceUpdater + */ + void UpdatePresenceL( const TDesC& aUserId ); + + /** + * @see MCAPresenceUpdater + */ + void ExtractAttributeModelsForUserL( + const TDesC& aUserId, + RPointerArray& aAttrModels ); + + const RPointerArray& PresenceStates(); + + void SetAttributeProcessing( TBool aEnabled ); + + private: + + /** + * C++ default constructor. + */ + CCAPEngPresenceManager(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( MCASettings* aApplicationSettings ); + + // Prohibit copy constructor if not deriving from CBase. + // CCAPEngPresenceManager( const CCAPEngPresenceManager& ) + // Prohibit assigment operator if not deriving from CBase. + // CCAPEngPresenceManager& operator=( const CCAPEngPresenceManager& ) + void DecodeFetcherDataL( + const MDesCArray& aUserList, + CDesCArray* aStateOnline = NULL, + CDesCArray* aStateOffline = NULL, + CDesCArray* aStateUnknown = NULL, + TBool aUpdateStorage = EFalse ); + + static TInt DecodeAttrModels( TAny *aInstance ); + TInt DoDecodeAttrModels(); + + void DecodeNotifierDataL( + CPEngTrackedPresenceIDs2* aChangedPresenceIDs, + const MDesCArray* aUserList ); + + TBool IsLoggedIn() const; + + /** + * Populates the attribute models from PEC Engine cache + * of fetched/subscribed attributes + * @param aArray Will contain the populated attribute models + * @param aUserList The list of users to parse, ignored + * in case of notifier + * @param aChangedPresenceIDs The IDs which were changed + * (NULL if fetcher) + */ + void PopulateAttrModelsL( + RPointerArray& aArray, + const MDesCArray* aUserList = NULL, + CPEngTrackedPresenceIDs2* aChangedPresenceIDs = NULL ); + + // See MCASettings.h for authorization modes + void SetPresenceAuthorizationL( TInt aAppSettingsAuthValue ); + + void FetchAttributesL( const MDesCArray& aUsers, + CDesCArray *aStateOnline, + CDesCArray *aStateOffline, + CDesCArray *aStateUnknown, + TBool aUpdateStorage ); + + /** + * Initializes PEng API related handlers + * @param aSessionSlotID a network session slot id + */ + void InitializePEngAPIL(); + + + /** + * Initializes a pending own presence observer + */ + void InitializeOwnPresenceObserverL(); + + /** + * Notifies own presence observer, + */ + void NotifyOwnPresenceObserverL(); + + /** + * Map internal dynamic attributes to PEC attributes, + * @param aAttribute The attribute + */ + TUint32 InternalToPECAttrL( TDynamicAttributes aAttribute ); + + /** + * Helper method to extract the attribute model for the given attribute + * out of the current attribute store. + * @params aId The WVID + * @params aArray Where to put the attribute (appended) + * @params aAttribute The attribute to parse + * Will leave with errors. + */ + void ExtractAttributeModelL( + const TDesC& aId, + RPointerArray& aArray, + TUint32 aAttribute ); + + /** + * Extracts all supported attribute models for the users + * given in the list. Attribute models are appended to + * the given array. + * @param aUserList The list of users + * @param aAttrModels The attribute models to which to append + * the extracted models + */ + void ExtractAttributeModelsForUsersL( + const MDesCArray& aUserList, + RPointerArray& aAttrModels ); + + private: // Data + // Owns. Internal list-manager + CCAPEngListManager* iListManager; + // Doesn't own. Presence module observer + MCAPresenceObserver* iPresenceObserver; + // Owns. Presence fetcher from Presence Engine + CPEngAttributeTransaction2* iPEngAttributeTransaction; + + // Owns. Presence attribute store from Presence Engine + CPEngAttributeStore2* iPEngAttributeStore; + // Doesn't own. + MCASettings* iApplicationSettings; + // Doesn't own. + MCAWatcherObserver* iWatcherObserver; + // Owns. Queue for incoming requests + TCARequestQueue iRequestQueue; + // Error data container + CCAPresenceErrors* iErrors; + + RArray iAttributes; + TInt iOperationError; + TInt iAuthMode; + TInt iNetworkState; + + TBool iPEngAPIInitialized; + + // Doesn't own. Own presence status observer + MCAPresenceObserver* iOwnStatusObserver; + + // Owns. presence notifier + CPEngPresenceNotifier2* iOwnPresenceNotifier; + + // Owns. Network session slot ID + CPEngNWSessionSlotID2* iSessionSlotID; + + // a flag that tells if there is an observer + // which needs initialization + TBool iObserverQueued; + + // cached app auth settings value + TInt iCachedAppSettingsAuthValue; + + // a flag which tells if there is a cached + // status value (both status and status text) + TBool iCachedStatus; + // cached presence status + TPresenceStatus iCachedPresenceStatus; + // cached status text + HBufC* iCachedStatusText; + + // ----- reactive authorization ----- + + // ETrue if reactive authorization in use + TBool iRAUsed; + + // observer for reactive authorization, not owned + MCAReactiveAuthObserver* iRAObserver; + + // reactive authorization store, owned + CPEngReactAuthStore* iRAStore; + + // reactive authorization notifer, owned + CPEngReactAuthNotifier* iRANotifier; + + // reactive authorization transaction, owned + CPEngReactAuthTransaction* iRATransaction; + + // alias support enabled (ETrue) or not (EFalse) + TBool iAliasUsed; + + // Server preferences structure given by the IM Engine + // used for branding purposes + SServerPrefers iServerPrefers; + + // owned + RPointerArray iOwnStates; + + // owned + RPointerArray iPresenceStates; + + // owned. Model arrays are used for attribute decoding. + RArray< TDecodeAttrParams > iAttrArrays; + + // owned: Idle for attribute decoding. + CIdle* iIdle; + + // should we process attributes or not + TBool iAttributeProcessing; + + // Objects fetched with FetchAttributesToObjects() are placed here + RPointerArray iFetchObjects; + }; + +#endif // CCAPENGPRESENCEMANAGER_H + +// End of File +