--- /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 <MPEngPresenceObserver2.h>
+#include <MPEngAttributeTransactionObserver2.h>
+#include <MPEngReactAuthObserver.h>
+#include <MPEngReactAuthTransactionObserver.h>
+
+// 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<MPEngPresenceAttrModel2>& aAttrModels );
+
+ const RPointerArray<CCAState>& 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<MPEngPresenceAttrModel2>& 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<MPEngPresenceAttrModel2>& 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<MPEngPresenceAttrModel2>& 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<TUint32> 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<CCAState> iOwnStates;
+
+ // owned
+ RPointerArray<CCAState> 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<MPEngPresenceAttrModel2> iFetchObjects;
+ };
+
+#endif // CCAPENGPRESENCEMANAGER_H
+
+// End of File
+