diff options
Diffstat (limited to 'kopete/protocols/jabber/jabbercontact.h')
-rw-r--r-- | kopete/protocols/jabber/jabbercontact.h | 266 |
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 |