diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCAGroupManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuieng/EngSrc/CCAGroupManager.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,445 @@ +/* +* Copyright (c) 2003 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: Network operations for chat group handling. +* +*/ + + +#ifndef CCAGROUPMANAGER_H +#define CCAGROUPMANAGER_H + +// INCLUDES +#include "MCAImpsGroupClient.h" +#include "MCAGroupManagerInterface.h" +#include "PublicEngineDefinitions.h" +#include +#include + +#include + +// FORWARD DECLARATIONS +class MCAStoredGroups; +class MCAStoredContact; +class MCAStoredContacts; +class MCASettings; +class CCARequestMapper; +class MCASearchInterface; +class MCAGroupObserver; +class CCAGroupWrapper; +class MCAImpsFactory; +class MCAChatInterface; +class MCAMessageUtils; +class MCAMessagesWriteInterface; + +// CLASS DECLARATION + +/** + * Network operations for chat group handling. + * + * @lib CAEngine.lib + * @since 2.1 + */ +class CCAGroupManager : public CBase, + public MImpsErrorHandler2, + public MImpsGroupHandler2, + public MCAGroupManagerInterface + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aSearchAPI is the API to the search manager. + * @param aSettingsAPI is the API to the settings side. + * @param aRequestMapper is the API to the request mapper. + * Used to provide synchronous waiting. + * @param aIMPSFactory The factory which can create IMPS interfaces + * when demanded + * @param aChatInterface is the API to the chat containers. + */ + static CCAGroupManager* NewL( + MCASearchInterface& aSearchAPI, + MCASettings& aSettingsAPI, + CCARequestMapper& aRequestMapper, + MCAImpsFactory* aIMPSFactory, + MCAChatInterface& aChatInterface, + MCAMessageUtils& aMessageUtils ); + + /** + * Destructor. + */ + virtual ~CCAGroupManager(); + + public: // from MCAGroupManagerInterface + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::NumberOfCreatedGroupsDuringSession + */ + TInt NumberOfCreatedGroupsDuringSession() const; + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::PopulateCreatedGroupsL + */ + TInt PopulateCreatedGroupsL( CDesCArray& aGroupList ) const; + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::JoinedGroups + */ + TInt JoinedGroups(); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::GroupOperationsL + */ + MCAGroupOperations* GroupOperationsL( const TDesC& aId ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::SetGroupEventObserverL + */ + void SetGroupEventObserverL( const TDesC& aId, MCAGroupEventObserver* aObserver ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::CreateGroupL + */ + HBufC* CreateGroupL( + CImpsCommonGroupProps* aProperties, + CImpsPrivateGroupProps* aPrivProperties, + const TDesC& aScreenName, + TBool aJoinGroup, + TBool aIsWhisperingEnabled, + TInt& aErrorCode + ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::JoinGroupL + */ + TInt JoinGroupL( const TDesC& aGroupId, const TDesC& aScreenName, + TBool aUsers, TBool aIsFavourite, TBool aIsWhisperingEnabled ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::LeaveJoinedGroupsL + */ + void LeaveJoinedGroupsL(); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::LeaveGroupL + */ + TInt LeaveGroupL( const TDesC& aGroupId ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::GenerateGroupIdLC + */ + HBufC* GenerateGroupIdLC( const TDesC& aResourcePart ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::DeleteGroupL + */ + TInt DeleteGroupL( const TDesC& aGroupId, TBool aDeleteFromNetwork ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::IsAllowedAccessL + */ + TBool IsAllowedAccessL( const TDesC& aGroupId, + const CDesCArray& aCheckUsers, + CDesCArray& aNotInList ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::IsGroupOpenL + */ + TBool IsGroupOpenL( const TDesC& aGroupId ); + + /** + * From MCAGroupManagerInterface + * @see MCAGroupManagerInterface::GroupNameL + */ + HBufC* GroupNameL( const TDesC& aGroupId ); + + public: // new methods + + /** + * Handles network state changes + * @param aState network state + */ + void HandleNetworkStateChangeL( TNetworkState aState ); + + /** + * Propagates IMPS error code. + * @param aError last IMPS error. + */ + void LastImpsError( TInt aError ); + void CancelGroupOperationL(const TDesC& aGroupId); + + protected: // From MImpsErrorHandler + + /** + * From MImpsErrorHandler + * @see MImpsErrorHandler::HandleErrorL + */ + void HandleErrorL( + TInt aStatus, + TInt aOpId, + const TDesC* aDescription, + const CImpsDetailed* aDetailedRes, + TImpsCspIdentifier& aCspId ); + + protected: // From MImpsGroupHandler + + /** + * From MImpsGroupHandler, Handles a response of CreateGroupL, DeleteGroupL, + * AddMembersL, + * RemoveMembersL, ModifyMembersAccessL, SubscribeL, UnsubscribeL. + * @see MImpsGroupHandler::HandleCompleteL + */ + void HandleCompleteL( + TInt aOpId, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles JoinGroupL response. + * @see MImpsGroupHandler::HandleJoinL + */ + void HandleJoinL( + TInt aOpId, + const MDesCArray& aUserList, + const MDesCArray& aScreenNames, + const TDesC& aWelcomeText, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles GroupMembersL response. + * @see MImpsGroupHandler::HandleGroupMembersL + */ + void HandleGroupMembersL( + TInt aOpId, + const MDesCArray& aUserList, + const MDesCArray& aScreenNames, + const MDesCArray& aModers, + const MDesCArray& aAdmins, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles GroupPropertiesL response and subscribed notification. + * @see MImpsGroupHandler::HandleGroupPropertiesL + */ + void HandleGroupPropertiesL( + TInt aOpId, + const TDesC& aGroupId, + const CImpsCommonGroupProps& aGroupProps, + const CImpsPrivateGroupProps& aOwnProps, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles SetRejectListL response. + * @see MImpsGroupHandler::HandleRejectListL + */ + void HandleRejectListL( + TInt aOpId, + const MDesCArray& aUserList, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles CheckSubscriptionL response. + * MImpsGroupHandler::HandleSubscriptionL + */ + void HandleSubscriptionL( + TInt aOpId, + TBool aIsSubscribed, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles group change notification about new users. + * @see MImpsGroupHandler::HandleNewUsersL + */ + void HandleNewUsersL( + const TDesC& aGroupId, + const MDesCArray& aUserList, + const MDesCArray& aScreenNames, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles group change notification about users left. + * @see MImpsGroupHandler::HandleLeftUsersL + */ + void HandleLeftUsersL( + const TDesC& aGroupId, + const MDesCArray& aUserList, + const MDesCArray& aScreenNames, + TImpsCspIdentifier& aCspId ); + + /** + * From MImpsGroupHandler, Handles both LeaveGroupL response and a service + * initiated group leave situation. + * @see MImpsGroupHandler::HandleLeaveL + */ + void HandleLeaveL( + TInt aOpId, + const TDesC& aGroupId, + const TDesC& aDescription, + TImpsCspIdentifier& aCspId ); + + private: // new methods + + /** + * Find the group wrapper class based on the operation id. + * @param aOpId The operation id + * @return The group wrapper if found, NULL otherwise + */ + CCAGroupWrapper* FindGroupWrapper( TInt aOpId ); + + /** + * Overloaded version. + * @param aGroupId The group id + * @see FindGroupWrapper + */ + CCAGroupWrapper* FindGroupWrapper( const TDesC& aGroupId ); + + /** + * Get the properties for the given group. + * Replaces the given parameters with new properties. + * Used internally. + * @param aGroupId The group id + * @param aCommonProps The group common properties + * @param aPrivProps The group private properties + */ + void GetPropertiesL( const TDesC& aGroupId, + CImpsCommonGroupProps*& aCommonProps, + CImpsPrivateGroupProps*& aPrivProps ); + + /** + * Delete a group wrapper based on the group id. + * Doesn't do anything if no such group id could be found. + * @param aGroupId The group id + */ + void DeleteGroupWrapper( const TDesC& aGroupId ); + + /** + * Create a new group wrapper and add it to the internal list. + * Leaves if the group could not be found. + * @param aGroupId The group id + * @return The created wrapper + */ + CCAGroupWrapper* CreateWrapperL( const TDesC& aGroupId ); + + /** + * Cleanup things after leaving group + * @param aWrapper The group wrapper + */ + void CleanupLeaveGroupL( const TDesC& aGroupId ); + + /** + * Force the setting of private allowed flag + * @param aWrapper Group wrapper + * @param aPrivProps Private properties + */ + TInt SetPrivateAllowedL( CCAGroupWrapper& aWrapper, + CImpsPrivateGroupProps& aPrivProps ); + + /** + * Remove the chat data for the given group id. + * If the chat data does not exist, it is not removed, + * and there will be no error. + * @param aGroupId The group id + */ + void RemoveChatDataL( const TDesC& aGroupId ); + + + /** + * Writes welcome message to messageinterface according to parameters. + * If custom welcome message don't exist, the default one with + * screen name is shown. Topic string is shown only if it is defined. + * @param aWelcomeMessage Custom welcome message + * @param aGroup Group name or id. + * @param aTopic Topic + * @param aMessages Iterface for writing constructed messages + * @return None + */ + void WriteWelcomeMessageL( const TDesC& aWelcomeMessage, + const TDesC& aGroup, + const TDesC& aTopic, + MCAMessagesWriteInterface& aMessages ); + + private: + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); + + /** + * C++ default constructor. + * @see CCAGroupManager::NewL. + */ + CCAGroupManager( + MCASearchInterface& aSearchAPI, + MCASettings& aSettingsAPI, + CCARequestMapper& aRequestMapper, + MCAImpsFactory* aIMPSFactory, + MCAChatInterface& aChatInterface, + MCAMessageUtils& aMessageUtils ); + + private: // Data + + CCARequestMapper& iRequestMapper; // not owned + MCASettings& iSettingsAPI; // not owned + MCASearchInterface& iSearchAPI; // not owned + + MCAStoredGroups* iStoredGroups; // not owned + MCAStoredContacts* iStoredContacts; // not owned + + // not owned + MCAImpsFactory* iImpsFactory; + + MCAChatInterface& iChatInterface; // not owned + MCAMessageUtils& iMessageUtils; // not owned + + RPointerArray< CCAGroupWrapper > iGroupWrappers; // owned + + // These are used temporarily to store group properties + // during CreateGroupL method before passing ownership + // to group wrapper. Set at the start of CreateGroupL + // method (after deleting previous values just in case that + // previous CreateGroupL has failed) and set to NULL after + // owner ship of properties is transferred to group wrapper. + //If something fails (Leaves ) between these two phases, then variables + // are not NULL and should be deleted in destructor or in next + // time calling CreateGroupL. + CImpsCommonGroupProps* iProperties; + CImpsPrivateGroupProps* iPrivProperties; + + TInt iNumCreatedGroups; + TInt iGroupIdOrdinal; + TInt iNumJoinedGroups; + + // last IMPS error from CCAEngine + TInt iLastImpsError; + + // Operation id of group props request when joining + // to group + TInt iPropsOpIdWhileJoining; + }; + +#endif // CCAGROUPMANAGER_H + +// End of File