diff -r 000000000000 -r 094583676ce7 wvuing/wvuipresence/src/CAPresenceUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuipresence/src/CAPresenceUtils.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,298 @@ +/* +* 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: Utility class for presence functions +* +*/ + + + +#ifndef CAPRESENCEUTILS_H +#define CAPRESENCEUTILS_H + +// INCLUDES +#include "TStorageManagerGlobals.h" +#include "CAPresenceDefinitions.h" +#include "MCAContactLists.h" + +#include +#include + +#include "impsbuilddefinitions.h" + +// FORWARD DECLARATIONS +class MCAWatcherObserver; +class MPEngPresenceAttrModel2; +class MCAStoredContacts; +class MPEngContactList2; +class MPEngTransactionStatus2; +class CCAPresenceErrors; +class TPEngNotify; +class MCAStoredContact; +struct TDecodeAttrParams; +class TResourceReader; +class MCAPresenceUpdater; +class MCAContactList; + +// helper classes for storing attributes +class TCAAttribute + { + public: // data + + TUint32 iAttribute; + TBool iQualifier; + TInt iData; + TInt iField; + TInt iGroup; + }; + +class CCAState : public CBase + { + public: + // constructor + CCAState( TInt aStateId ) + : iStateId( aStateId ) + { + }; + + // destructor + virtual ~CCAState() + { + iAttributes.Close(); + }; + + public: // data + + TInt iStateId; + RArray iAttributes; + + }; + + +// CLASS DECLARATION + +/** +* Utility class for presence functions +* +* @lib CAPresence.dll +* @since 2.1 +*/ +class CAPresenceUtils // CSI: 51 # This is not a C-class + // although it begins with CA. + { + public: // New functions + + /** + * Decodes given TPresenceAttrEntity (clientType) to storage TClientType + * @since 2.1 + * @return Storage TClientType + */ + static TStorageManagerGlobals::TClientType DecodeClientType( + TCAAttribute aClientTypeAttr ); + + /** + * Decodes given TPresenceAttrEntities (Online, CommCAP/IM) to presence + * TPresenceStatus + * @since 2.1 + * @param aStates State-array + * @param aOnlineAttr Online-attribute + * @param aIMStatusAttr CommCAP/IM-attribute + * @param aUserAvailAttr User availability attribute + * @return Presence TPresenceStatus + */ + static MCAPresence::TPresenceStatus DecodeOnlineState( + const RPointerArray& aStates, + const RPointerArray& aAttributes ); + + /** + * Fills given arrays with given data (aUserId,aPresenceStatus). + * You can give only selected arrays that will be populated. + * @since 2.1 + * @param aUserId WVId of user + * @param aPresenceStatus Presence status of given user + * @param aStateOnline Online-array + * @param aStateOnline aStateOffline-array + * @param aStateOnline aStateUnknown-array + */ + static void FillArraysL( const TDesC& aUserId, + TStorageManagerGlobals::TPresenceStatus aPresenceStatus, + CDesCArray *aStateOnline, + CDesCArray *aStateOffline, + CDesCArray *aStateUnknown ); + + /** + * Populates some of given attributes with data found from given model + * @since 3.0 + */ + static void PopulateAttributesL( + const MPEngPresenceAttrModel2& aModel, + RPointerArray& aArray, + TStorageManagerGlobals::TClientType& aClientType, + TPtrC& aAlias, + TPtrC& aStatusText ); + + /** + * Generates array of friends. + * Array ownership is transferred to caller!!! + * @since 2.1 + * @param aContactStorage Handle to contact storage + * appending to result array + * @return Array of friends. + */ + static CPtrCArray* GenerateFriendsArrayLC( + MCAStoredContacts* aContactStorage ); + + /** + * Pushes given array to CleanupStack + * @since 2.1 + * @param aArray Array to be pushed to CleanupStack + * @param aOwnsItems Does array own it's objects + */ + static void PushModelArrayL( + RPointerArray& aArray, + TBool aOwnsItems ); + + /** + * Internally used by IM Presence. + * Decode the attribute models. + * @param aParams The structure used when decoding the parameters + * @return ETrue if all done? + */ + static TBool DecodeAttrModelsL( + struct TDecodeAttrParams& aParams + ); + + /** + * Handles given error. + * This method will leave with given error, except when error is: + * KErrNone/KErrNotFound/KErrAlreadyExists. These errors can be ignored + * with presence engine list-handling. + * @since 2.1 + * @param aError Errorcode + */ + static void HandleListErrorsL( TInt aError ); + + /** + * Compares two attribute models by presence ids. + * @since 2.1 + * @param aFirst First model + * @param aSecond Second model + * @return Comparison value (@see TDesC::CompareF) + */ + static TInt CompareAttrModelArray( + const MPEngPresenceAttrModel2& aFirst, + const MPEngPresenceAttrModel2& aSecond ); + + /** + * Calls close to given array. + * @since 2.1 + * @param aObject Array (RPointerArray) + */ + static void CloseModelArray( TAny* aObject ); + + /** + * Calls ResetAndDestroy to given array + * @since 2.1 + * @param aObject Array (RPointerArray) + */ + static void DestroyCloseModelArray( TAny* aObject ); + + /** + * Creates detailed error description to error container based on + * information retrieved from given MPEngTransactionStatus + * @since 2.1 + * @param aStatus Transaction status + * @param aErrorContainer Error container + */ + static void HandleTransactionStatusL( + MPEngTransactionStatus2& aStatus, + CCAPresenceErrors& aErrorContainer ); + + /** + * Changes given error's base to Imps_ERROR_BASE if given error is + * in PEC range (KPEngErrorBase-KPEngErrorWVServerResponseBase) + * @since 2.1 + * @param aError Original errorcode + * @return Mapped errorcode + */ + static TInt MapErrorPECtoCSP( TInt aError ); + + /** + * Appends contacts in multiple rounds. Used by CIdle. + * @param aContactList contact list which is added to local data + * @param aWVIds if not null then contact wvids are added here + * @param aNicknames if not null then nicnames are added here + * @param aContactStorage if aWVIds or aNicknames are null, then + * contacts are added to this storage + * @param aEntryIndex current index were from continue contact + * list handling + * @return ETrue if method should be called again to continue + * list handling + */ + static TBool AppendContactsL( MPEngContactList2* aContactList, + CDesCArray* aWVIds, + CDesCArray* aNicknames, + MCAStoredContacts* aContactStorage, + TInt& aEntryIndex, + MCAContactList& aCaContactList, + MCAPresenceUpdater& aPresenceUpdater ); + + + + /** + * Reads one attribute from resource + * @param aResourceId Resource Id + * @return Attribute + */ + static TCAAttribute ReadAttributeL( TResourceReader& aReader ); + + /** + * Map resource state id to presence state id + */ + static TInt MapStateId( TInt aResourceStateId ); + + /** + * Map presence state id to storage state id + */ + static TStorageManagerGlobals::TPresenceStatus MapPresenceStateId( + MCAPresence::TPresenceStatus aPresenceStateId ); + + /** + * Reads presence states and attribute combinations from resource + * @param aResourceId Resource Id + * @param aStates Containes states on return + */ + static void ReadStatesFromResourceL( TInt aResourceId, + RPointerArray& aStates ); + + /** + * @return State matching to aState, or NULL if not found + */ + static CCAState* FindStateL( TInt aState, const RPointerArray& aStates ); + + /** + * @return Attribute matching to aType, or NULL if not found + */ + static const MPEngPresenceAttrModel2* FindAttr( TInt aType, + const RPointerArray& aArray ); + + /** + * @return ETrue if states match + */ + static TBool EqualStates( const CCAState& aState1, const CCAState& aState2 ); + + }; + +#endif // CAPRESENCEUTILS_H + +// End of File