You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
6.6 KiB
267 lines
6.6 KiB
15 years ago
|
/*
|
||
|
* 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
|