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