wvuing/wvuiprocess/Inc/CCAGroupUtilsPC.h
changeset 0 094583676ce7
--- /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