diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Inc/CCAGroupUtilsPC.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiprocess/Inc/CCAGroupUtilsPC.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,394 @@ +/* +* Copyright (c) 2006 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: Group handling utilities +* +*/ + + + +#ifndef CCAGROUPUTILSPC_H +#define CCAGROUPUTILSPC_H + +// INCLUDES +#include "CCAChatInfoArray.h" +#include "MCAGroupOperations.h" +#include "MCAGroupUtilsPC.h" +#include "MCAInviteConflictResolver.h" + +#include +#include + +// FORWARD DECLARATIONS +class CCAEngine; +class MCAGroupOperations; +class CImpsCommonGroupProps; +class CImpsPrivateGroupProps; +class CCAServerContactsArray; +class MCAConversationMessage; +class MCAStoredGroups; + + + +// CLASS DECLARATION + +/** +* Process component for Group editing and displaying utilities +* +* @lib chatng.app +*/ +class CCAGroupUtilsPC : public CBase, + public MCAGroupUtilsPC + { + public: // constructor + /** + * Static constructor. + * @param aEngine Handle to application engine + * @return Instance of this class + */ + static CCAGroupUtilsPC* NewLC( CCAEngine& aEngine ); + + /** + * Static constructor. + * @param aEngine Handle to application engine + * @return Instance of this class + */ + static CCAGroupUtilsPC* NewL( CCAEngine& aEngine ); + + /** + * Destructor + */ + ~CCAGroupUtilsPC(); + + public: + + // simple group generation ("SGC") FSM states + enum TSGCState + { + ESGCInviteContacts = 0, // choose contacts to invite (Begin state) + ESGCGroupName, // select group name + ESGCInviteMessage, // invite message query + ESGCScreenName, // screenname query or alias usage + ESGCCreateGroup, // create the group + ESGCDoSendInvite, // send the invitations, if any + ESGCDoJoin, // actually join the group + ESGCError, // error state + ESGCQueryCancel, // ask for cancelling + ESGCNone // no state + }; + + // Chat group join mode + enum TJoinMode + { + EStoredId = 0, // Group id received from some store + EManualId // Group id entered manually by user + }; + + + /* + *@see MCAGroupUtilsPC + */ + CCAChatInfoArray* GetChatInfoArrayL( const TDesC& aGroupId ); + + /* + *@see MCAGroupUtilsPC + */ + TInt GetCreatedChatRoomListL( CDesCArray& aTempArray, CDesCArray& aGroupIds ); + + /* + *@see MCAGroupUtilsPC + */ + TInt SwitchToJoinedGroupL( const TDesC& aGroupID, TCADnlChatViewBuf& aViewDnl , + const MCAConversationMessage* aFwdMessage, + TBool aInviteQuery ); + + + /** + * To show the screen name query with given group name + * @param aScreenName: display name + */ + void ScreenNameQueryL( TDes& aScreenName ); + + /** + * Helper function for EditChatGroupPropertiesL and CreateNewChat. + * Moves own user id to first in list. + * @param aList Reference to a list where own user id is removed and moved to + * the first position. + */ + void MoveOwnIdToFirstL( CDesCArray& aList ); + + /** + * Updates the group member status. Leaves on errors. + * This method will calculate delta lists based on previous and new + * lists + * @param aGroupId GroupID + * @param aOldAdmins List of previous admins + * @param aAdmins List of new admins + * @param aOldUserList List of previous users + * @param aUserList List of new users + * @param aOldRejected List of previous rejected users + * @param aRejected List of new rejected users. + */ + void UpdateGroupMembersL( const TDesC& aGroupId, + const CDesCArray& aOldAdmins, const CDesCArray& aAdmins, + const CDesCArray& aOldUserList, const CDesCArray& aUserList, + const CDesCArray& aOldRejected, const CDesCArray& aRejected ); + + /** + * Adds members to the group. Leaves on errors + * @param aGroupId GroupID + * @param aAdmins Admins + * @param aUserList Users + * @param aRejected Rejected users + */ + void AddGroupMembersL( const TDesC& aGroupId, CDesCArray& aAdmins, + const CDesCArray& aUserList, const CDesCArray& aRejected ); + + /** + * Gets the banned users of group + * @param aRejectList List of rejected users + * @param aGroup: group id whose rejected lists ve to be fetched + * @return CSP error code + */ + TInt GetRejectListL( CDesCArray& aRejectList , const TDesC& aGroupId ); + + /** + * Gets the members of group + * @param aUserList List of users + * @param aScreenNames List of screen names + * @param aModers List of moderators + * @param aAdmins List of administrators + * @return CSP error code + */ + TInt GetMembersL( CDesCArray& aUserList, + CDesCArray& aScreenNames, + CDesCArray& aModers, + CDesCArray& aAdmins, const TDesC& aGroup ); + + /* + *@see MCAGroupUtilsPC + */ + const TPtrC GetIdentificationL( const TDesC& aContactId ); + + + /** + * Creates new group to server + * @param aScreenName screen name + * @param aJoinGroup Should the group be joined after creation + * @return CSP error code + */ + HBufC* CreateGroupL( const TDesC& aScreenName, const TDesC& aGroupName, TInt& aError ); + + /** + * Join a group. + * Leaves if out of memory before sending a message to the Symbian OS server. + * @param aGroupId group id + * @param aScreenName screen name for the user, optional (may be zero length) + * @param aUsers ETrue if a user wants to get list of joined users in a reponse, + * @param aIsFavourite : if the group is saved as favourite + * @return operation-id (positive) + */ + TInt JoinGroupL( const TDesC& aGroupId, + const TDesC& aScreenName, + TBool aUsers, TBool aIsFavourite ); + + /** + * To fetch the data of a group + * @param aGroupId: id of the group whose data has to be fetched + * @param aUserList: list of users allowed access to the group + * @param aScreenNames: screen names of all the users joined to the group + * @param aModerators: the users given moderator privileges to the group + * @param aAdmins: the users who have been given admin privileges to the list + * @param aRejected: list of users banned from entering the group + * @return errorcode + */ + TInt GetGroupDataL( const TDesC& aGroupId, + CDesCArray& aUserList, CDesCArray& aScreenNames, + CDesCArray& aModerators, CDesCArray& aAdmins, + CDesCArray& aRejected ); + + /* + *@see MCAGroupUtilsPC + */ + virtual void GetDefaultGroupNameL( TPtr& aChatGroupName, + TEnumsPC::TListSelectionType aSelType ); + + /* + *@see MCAGroupUtilsPC + */ + TInt ProcessEditedGroupPropertiesL( const TDesC& aGroupId, + CDesCArray& aOldAdmins, + CDesCArray& aNewAdmins, + CDesCArray& aOldUsers, + CDesCArray& aNewUsers, + CDesCArray& aOldRejected, + CDesCArray& aNewRejected ); + + /* + *@see MCAGroupUtilsPC + */ + HBufC* GetAliasL(); + + /* + *@see MCAGroupUtilsPC + */ + void CreateOrJoinGroupL( const TDesC& aGroupId, + TBool& aIsJoined, TBool& aIsFavourite ); + + + /* + *@see MCAGroupUtilsPC + */ + void SaveAsFavouriteL( const TDesC& aGroupId ); + + /** + * Name of the group + * @return name of the group + */ + TPtrC GetEngineDefaultGroupName( const TDesC& aGroupId ) const; + + /** + * Set the group name property of the specified group + * @param aGroupId: group id of the group whose name has to be changed + */ + void SetGroupNameL( const TDesC& aGroupId ); + + /* + *@see MCAGroupUtilsPC + */ + TInt DeleteGroupL( const TDesC& aGroupId, TBool aDeleteFromNetwork ); + + /* + *@see MCAGroupUtilsPC + */ + TInt DeleteChatGroupFromNetworkL( const TDesC& aGroupId, TBool aDeleteFromNetwork ); + + /* + *@see MCAGroupUtilsPC + */ + void DeleteFailedGroupL( const TDesC& aGroupId, TBool aDeleteFromNetwork ); + + /* + *@see MCAGroupUtilsPC + */ + TPtrC GetGroupNameForJoinedGroupL( const TDesC& aGroupId ); + + /* + *@see MCAGroupUtilsPC + */ + HBufC* CreateGroupSimpleL( const TDesC& aScreenName, + TBool aJoinGroup, + TBool aIsWhisperingEnabled, + TInt& aErrorCode ) ; + + + /** + * To send invitations from the group view to selected contacts + * @param aUserIDs: list of users to whom the invites have to be sent + * @param aGroupId: id of the group from which the invite is being sent + * @param aMessage: the message that has to be sent to the invitees + * @return int: error code + */ + TInt SendInvitationsL( const CDesCArray& aUserIDs, + const TDesC& aGroupID, + const TDesC& aMessage ); + + public: + + /** + * Find a group from the store + * @param aId the ID of the group to find + * @return The group + */ + TBool FindGroup( const TDesC& aId ) ; + + /** + * Get the User Ids of participants of the group (joined users) + * Makes copies of the descriptors. + * @param aParticipantList + */ + void GetParticipantsL( CDesCArray& aParticipantList, + const TDesC& aGroupId ) const ; + + /** + * Check if the user has joined this group + * @return ETrue if the group has been joined + */ + TBool IsJoined( const TDesC& aGroupId ) const ; + + /** + * See if this is the user's group + * @return ETrue if this group is the user's group + */ + TBool IsOwnGroup( const TDesC& aGroupId ) const ; + + /** + * Check if the user is administrator in this group + * @return ETrue if the user is administrator + */ + TBool IsAdmin( const TDesC& aGroupId ) const ; + + /** + * Leave the given group. Use this method instead of + * calling the wrapper directly (to avoid race + * conditions). This method also does cleanup and + * removes the group wrapper, if necessary. + * Wraps the LeaveL in MCAGroupOperations. + * @param aGroupId The group to leave + * @return IMPS error code from LeaveL + */ + TInt LeaveGroupL( const TDesC& aGroupId ) ; + + + /** + * Checks if chat group is favourite or not + * @param aGroupId The id of group for which to know if user has saved has favorite + * @return ETrue if favourite EFalse if not + */ + TBool IsFavouriteChatGroup( const TDesC& aGroupId ) const ; + + private: // constructors and destructors + + /** + * constructor + */ + void ConstructL(); + + /** + * Default constructor + * @param aEngine Handle to engine + * @param aViewSwitcher Handle to view switcher + */ + CCAGroupUtilsPC( CCAEngine& aEngine ); + + private: // Data + + // Handle to application engine. + CCAEngine& iEngine; + + // Owns. Used temporarily in CreateNewChatL. + HBufC* iGroupId; + + //Pointer to current group. Doesnt own + MCAStoredGroup* currentGroup; + + //doesn't own,handle to groups interface + MCAStoredGroups* iStoredGroups; + + //doesnt own. pointer to group manager interface + MCAGroupManagerInterface* iGroupManagerInterface; + }; + +#endif // CCAGROUPUTILSPC_H + +// End of File