summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/groupwise/gwmessagemanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/groupwise/gwmessagemanager.h')
-rw-r--r--kopete/protocols/groupwise/gwmessagemanager.h177
1 files changed, 177 insertions, 0 deletions
diff --git a/kopete/protocols/groupwise/gwmessagemanager.h b/kopete/protocols/groupwise/gwmessagemanager.h
new file mode 100644
index 00000000..5413fd23
--- /dev/null
+++ b/kopete/protocols/groupwise/gwmessagemanager.h
@@ -0,0 +1,177 @@
+//
+// C++ Interface: gwmessagemanager
+//
+// Description:
+//
+//
+// Author: SUSE AG <>, (C) 2004
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef GWMESSAGEMANAGER_H
+#define GWMESSAGEMANAGER_H
+
+#include <qptrqueue.h>
+#include <kopetemessage.h>
+#include <kopetechatsession.h>
+
+#include "gwerror.h"
+
+class QLabel;
+class KAction;
+class KActionMenu;
+class KDialogBase;
+class GroupWiseAccount;
+class GroupWiseContact;
+class GroupWiseContactSearch;
+/**
+ * Specialised message manager, which tracks the GUID used by GroupWise to uniquely identify a given chat, and provides invite actions and logging and security indicators. To instantiate call @ref GroupWiseAccount::chatSession().
+ * @author SUSE AG
+*/
+
+using namespace GroupWise;
+
+class GroupWiseChatSession : public Kopete::ChatSession
+{
+Q_OBJECT
+
+friend class GroupWiseAccount;
+
+public:
+ /**
+ * The destructor emits leavingConference so that the account can tell the server that the user has left the chat
+ */
+ ~GroupWiseChatSession();
+ /**
+ * The conference's globally unique identifier, which is given to it by the server
+ */
+ ConferenceGuid guid() const { return m_guid; }
+ /**
+ * Change the GUID
+ */
+ void setGuid( const ConferenceGuid & guid );
+ /**
+ * Utility account access
+ */
+ GroupWiseAccount * account();
+ /**
+ * Accessors and mutators for secure chat, logged chat, and closed conference flags
+ */
+ void setSecure( bool secure );
+ void setLogging( bool logged );
+ void setClosed();
+ bool secure();
+ bool logging();
+ bool closed();
+ /**
+ * Add invitees to the conference
+ */
+ void addInvitee( const Kopete::Contact * );
+ /**
+ * Add members to the conference
+ */
+ void joined( GroupWiseContact * );
+ /**
+ * Remove members from conference
+ */
+ void left( GroupWiseContact * );
+ /**
+ * An invitation was declined
+ */
+ void inviteDeclined( GroupWiseContact * );
+ /**
+ * Check whether the conversation being administratively logged and update the UI to indicate this
+ */
+ void updateArchiving();
+ /**
+ * Reimplemented from Kopete::ChatSession - invites contacts via DND
+ */
+ virtual void inviteContact(const QString& );
+signals:
+ /**
+ * Tell the contact we got a GUID so it can route incoming messages here.
+ */
+ void conferenceCreated();
+ /**
+ * Tell the account that the GroupWiseChatSession is closing so it can tell the server that the user has left the conference
+ */
+ void leavingConference( GroupWiseChatSession * );
+protected:
+ /**
+ * Start the process of creating a conference for this GWMM on the server.
+ */
+ void createConference();
+ /**
+ * Sends any messages and invitations that were queued while waiting for the conference to be created
+ */
+ void dequeueMessagesAndInvites();
+protected slots:
+ /**
+ * Receive the GUID returned by the server when we start a chat.
+ * @param mmId Message Manager ID, used to determine if this GUID is meant for this message manager
+ * @param guid The GUID allotted us by the server.
+ */
+ void receiveGuid( const int mmId, const GroupWise::ConferenceGuid & guid );
+ /**
+ * An attempt to create a conference on the server failed.
+ * @param mmId Message Manager ID to see if the failure refers to this message manager
+ */
+ void slotCreationFailed( const int mmId,const int statusCode );
+
+ void slotSendTypingNotification ( bool typing );
+ void slotMessageSent( Kopete::Message &message, Kopete::ChatSession * );
+ // TODO: slots for us leaving conference, us inviting someone, someone joining, someone leaving, someone sending an invitation, getting typing?
+ void slotGotTypingNotification( const ConferenceEvent & );
+ void slotGotNotTypingNotification( const ConferenceEvent & );
+ /**
+ * Popupulate the menu of invitable contacts
+ */
+ void slotActionInviteAboutToShow();
+ /**
+ * Invite a contact to join this chat
+ */
+ void slotInviteContact( Kopete::Contact * );
+ /**
+ * Show the search dialog to invite another contact to the chat
+ */
+ void slotInviteOtherContact();
+ /**
+ * Process the response from the search dialog; send the actual invitation
+ */
+ void slotSearchedForUsers();
+
+ void slotShowSecurity();
+ void slotShowArchiving();
+private:
+
+ GroupWiseChatSession(const Kopete::Contact* user, Kopete::ContactPtrList others, Kopete::Protocol* protocol, const ConferenceGuid & guid, int id = 0, const char* name = 0);
+
+ ConferenceGuid m_guid; // The conference's globally unique identifier, which is given to it by the server
+ int m_flags; // flags for secure connections, central logging and "conference closed" as given by the server
+
+ QValueList< Kopete::Message > m_pendingOutgoingMessages; // messages queued while we wait for the server to tell us the conference is created.
+ Kopete::ContactPtrList m_pendingInvites; // people we wanted to invite to the conference, queued while waiting for the conference to be created.
+ KActionMenu *m_actionInvite;
+ QPtrList<KAction> m_inviteActions;
+ // labels showing secure and logging status
+ KAction *m_secure;
+ KAction *m_logging;
+ // search widget and dialog used for inviting contacts
+ GroupWiseContactSearch * m_search;
+ KDialogBase * m_searchDlg;
+ // contacts who have been invited to join but have not yet joined the chat
+ Kopete::ContactPtrList m_invitees;
+ // track the number of members actually in the chat
+ uint m_memberCount;
+
+ /**
+ * return an unique identifier for that kmm
+ * @todo check it!
+ */
+ uint mmId() const;
+ uint m_mmId;
+
+};
+
+#endif