summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/jabber/jabbercontact.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/jabber/jabbercontact.h')
-rw-r--r--kopete/protocols/jabber/jabbercontact.h266
1 files changed, 266 insertions, 0 deletions
diff --git a/kopete/protocols/jabber/jabbercontact.h b/kopete/protocols/jabber/jabbercontact.h
new file mode 100644
index 00000000..a7a3b024
--- /dev/null
+++ b/kopete/protocols/jabber/jabbercontact.h
@@ -0,0 +1,266 @@
+ /*
+ * jabbercontact.cpp - Regular Kopete Jabber protocol contact
+ *
+ * Copyright (c) 2002-2004 by Till Gerken <till@tantalo.net>
+ *
+ * Kopete (c) by the Kopete developers <kopete-devel@kde.org>
+ *
+ * *************************************************************************
+ * * *
+ * * This program is free software; you can redistribute it and/or modify *
+ * * it under the terms of the GNU General Public License as published by *
+ * * the Free Software Foundation; either version 2 of the License, or *
+ * * (at your option) any later version. *
+ * * *
+ * *************************************************************************
+ */
+
+#ifndef JABBERCONTACT_H
+#define JABBERCONTACT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "jabberbasecontact.h"
+#include "xmpp_vcard.h"
+
+#include "kopetechatsession.h" // needed for silly Kopete::ContactPtrList
+
+class JabberChatSession;
+class QTimer;
+
+class JabberContact : public JabberBaseContact
+{
+
+Q_OBJECT
+
+public:
+
+ JabberContact (const XMPP::RosterItem &rosterItem,
+ Kopete::Account *account, Kopete::MetaContact * mc, const QString &legacyId = QString());
+
+ ~JabberContact();
+
+ /**
+ * Create custom context menu items for the contact
+ * FIXME: implement manager version here?
+ */
+ QPtrList<KAction> *customContextMenuActions ();
+
+ /**
+ * Start a rename request.
+ */
+ void rename ( const QString &newName );
+
+ /**
+ * Deal with an incoming message for this contact.
+ */
+ void handleIncomingMessage ( const XMPP::Message &message );
+
+ /**
+ * Create a message manager for this contact.
+ * This variant is a pure single-contact version and
+ * not suitable for groupchat, as it only looks for
+ * managers with ourselves in the contact list.
+ */
+ Kopete::ChatSession *manager ( Kopete::Contact::CanCreateFlags );
+
+
+ bool isContactRequestingEvent( XMPP::MsgEvent event );
+
+ QString lastReceivedMessageId () const;
+
+public slots:
+
+ /**
+ * Remove this contact from the roster
+ */
+ void deleteContact ();
+
+ /**
+ * Sync Groups with server
+ *
+ * operations are alctually performed in sloDelayedSync()
+ */
+ void sync(unsigned int);
+
+ /**
+ * This is the JabberContact level slot for sending files.
+ *
+ * @param sourceURL The actual KURL of the file you are sending
+ * @param fileName (Optional) An alternate name for the file - what the
+ * receiver will see
+ * @param fileSize (Optional) Size of the file being sent. Used when sending
+ * a nondeterminate file size (such as over a socket)
+ */
+ virtual void sendFile( const KURL &sourceURL = KURL(),
+ const QString &fileName = QString::null, uint fileSize = 0L );
+
+ /**
+ * Update the vCard on the server.
+ * @todo is that still used ?
+ */
+ void slotSendVCard();
+
+ /**
+ * Set contact photo.
+ * @param path Path to the photo.
+ */
+ void setPhoto(const QString &photoPath);
+
+ /**
+ * this will start a voice call to the contact
+ */
+ void voiceCall();
+
+private slots:
+
+ /**
+ * Send type="subscribed" to contact
+ */
+ void slotSendAuth ();
+
+ /**
+ * Send type="subscribe" to contact
+ */
+ void slotRequestAuth ();
+
+ /**
+ * Send type="unsubscribed" to contact
+ */
+ void slotRemoveAuth ();
+
+ /**
+ * Change this contact's status
+ */
+ void slotStatusOnline ();
+ void slotStatusChatty ();
+ void slotStatusAway ();
+ void slotStatusXA ();
+ void slotStatusDND ();
+ void slotStatusInvisible ();
+
+ /**
+ * Select a new resource for the contact
+ */
+ void slotSelectResource ();
+
+ void slotChatSessionDeleted ( QObject *sender );
+
+ /**
+ * Check if cached vCard is recent.
+ * Triggered as soon as Kopete changes its online state.
+ */
+ void slotCheckVCard ();
+
+ /**
+ * Triggered from a timer, requests the vCard.
+ * Timer is initiated by @ref slotCheckVCard.
+ */
+ void slotGetTimedVCard ();
+
+ /**
+ * Passes vCard on to parsing function.
+ */
+ void slotGotVCard ();
+
+ /**
+ * Get information about last activity of the contact.
+ * Triggered as soon as Kopete goes online or the contact goes offline.
+ */
+ void slotCheckLastActivity ( Kopete::Contact *, const Kopete::OnlineStatus &, const Kopete::OnlineStatus & );
+
+ /**
+ * Triggered from a timer, requests last activity information.
+ * Timer is initiated by @ref slotCheckLastActivity.
+ */
+ void slotGetTimedLastActivity ();
+
+ /**
+ * Updates activity information.
+ */
+ void slotGotLastActivity ();
+
+ /**
+ * Display a error message if the vCard sent was unsuccesful.
+ */
+ void slotSentVCard();
+
+ /**
+ * The service discovery on that contact is finished
+ */
+ void slotDiscoFinished();
+
+ /**
+ * actually perform operations of sync() with a delay.
+ * slot received by the syncTimer.
+ */
+ void slotDelayedSync();
+private:
+
+ /**
+ * Create a message manager for this contact.
+ * This variant is a pure single-contact version and
+ * not suitable for groupchat, as it only looks for
+ * managers with ourselves in the contact list.
+ * Additionally to the version above, this one adds
+ * a resource constraint that has to be matched by
+ * the manager. If a new manager is created, the given
+ * resource is preselected.
+ */
+ JabberChatSession *manager ( const QString &resource, Kopete::Contact::CanCreateFlags );
+
+ /**
+ * Create a message manager for this contact.
+ * This version is suitable for group chat as it
+ * looks for a message manager with a given
+ * list of contacts as members.
+ */
+ JabberChatSession *manager ( Kopete::ContactPtrList chatMembers, Kopete::Contact::CanCreateFlags );
+
+ /**
+ * Sends subscription messages.
+ */
+ void sendSubscription (const QString& subType);
+
+ /**
+ * Sends a presence packet to this contact
+ */
+ void sendPresence ( const XMPP::Status status );
+
+ /**
+ * This variable keeps a list of message managers.
+ * It is required to locate message managers by
+ * resource name, if one account is interacting
+ * with several resources of the same contact
+ * at the same time. Note that this does *not*
+ * apply to group chats, so this variable
+ * only contains classes of type JabberChatSession.
+ * The casts in manager() and slotChatSessionDeleted()
+ * are thus legal.
+ */
+ QPtrList<JabberChatSession> mManagers;
+
+ /**
+ * Indicates whether the vCard is currently
+ * being updated or not.
+ */
+ bool mVCardUpdateInProgress :1;
+
+ bool mRequestComposingEvent :1;
+ bool mRequestOfflineEvent :1;
+ bool mRequestDisplayedEvent :1;
+ bool mRequestDeliveredEvent :1;
+ bool mRequestGoneEvent :1;
+ /**
+ * tell if the disco#info has been done for this contact.
+ */
+ bool mDiscoDone :1;
+
+ QString mLastReceivedMessageId;
+ QTimer *m_syncTimer;
+
+};
+
+#endif