--- /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 <ImpsGroupCli.h>
+#include <ImpsClient.h>
+
+#include <e32base.h>
+
+// 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