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.
tdenetwork/kopete/protocols/jabber/jabberbasecontact.h

186 lines
4.8 KiB

/*
* jabbercontact.h - Base class for the Kopete Jabber protocol contact
*
* Copyright (c) 2002-2004 by Till Gerken <till@tantalo.net>
* Copyright (c) 2002 by Daniel Stone <dstone@kde.org>
*
* 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 JABBERBASECONTACT_H
#define JABBERBASECONTACT_H
#include "kopetecontact.h"
#include "xmpp.h"
#include "im.h"
class dlgJabberVCard;
class JabberProtocol;
class JabberAccount;
class JabberResource;
class JabberTransport;
namespace Kopete { class MetaContact; }
namespace XMPP { class VCard; }
class JabberBaseContact : public Kopete::Contact
{
Q_OBJECT
friend class JabberAccount; /* Friends can touch each other's private parts. */
public:
/**
* @param legacyId is the contactId of the contact if != Jid
*/
JabberBaseContact (const XMPP::RosterItem &rosterItem,
Kopete::Account *account, Kopete::MetaContact * mc,
const QString &legacyId=QString());
/********************************************************************
*
* Kopete::Contact reimplementation start
*
********************************************************************/
/**
* Return the protocol instance associated with this contact
*/
JabberProtocol *protocol ();
/**
* Return the account instance associated with this contact
*/
JabberAccount *account () const { return m_account; };
/**
* return the transport if any, or null
*/
JabberTransport *transport();
/**
* Return if the contact is reachable (this is true if the account
* is online)
*/
virtual bool isReachable ();
/**
* Create custom context menu items for the contact
* FIXME: implement manager version here?
*/
virtual QPtrList<KAction> *customContextMenuActions () = 0;
/**
* Serialize contact
*/
virtual void serialize (QMap < QString, QString > &serializedData, QMap < QString, QString > &addressBookData);
/**
* Update contact if a roster item has been
* received for it. (used during login)
*/
void updateContact ( const XMPP::RosterItem &item );
/**
* Deal with an incoming message for this contact.
*/
virtual void handleIncomingMessage ( const XMPP::Message &message ) = 0;
/**
* Update the resource property of the
* contact, listing all available resources.
*/
void updateResourceList ();
/**
* Return current full address.
* Uses bestResource() if no presubscribed
* address exists.
*/
QString fullAddress ();
/**
* Set the dontSync flag for this contact.
* If this flag is set, calls to @ref sync will
* be ignored. This is required if the contact
* has been moved between groups on the server
* after we logged in and we try to update our
* local contact list. Since libkopete can only
* handle one group update at a time, moving
* between groups requires to operations which
* each in turn would cause a call to sync(),
* overwriting the change that is being carried
* out. (besides causing unnecessary traffic)
* This is avoided by setting the dontSync flag
* while synchronizing the local copy.
*/
void setDontSync ( bool flag );
/**
* Return the status of the dontSync flag.
* See @ref setDontSync for a full description.
*/
bool dontSync ();
/**
* return the roster item of the contact.
* to get the jid, use rosterItem().jid().full() don't use contactId as it is not the same with transport
*/
XMPP::RosterItem rosterItem() const { return mRosterItem; }
/**
* Reads a vCard object and updates the contact's
* properties accordingly.
*/
void setPropertiesFromVCard ( const XMPP::VCard &vCard );
public slots:
/**
* Retrieve a vCard for the contact
*/
virtual void slotUserInfo ();
/**
* Re-evaluate online status. Gets called
* whenever a resource is added, removed, or
* changed in the resource pool.
*/
void reevaluateStatus ();
protected:
/**
* Construct best address out of
* eventually preselected resource
* (due to subscription) and best
* available resource.
*/
XMPP::Jid bestAddress ();
/**
* This will simply cache all
* relevant data for this contact.
*/
XMPP::RosterItem mRosterItem;
private:
bool mDontSync;
JabberAccount *m_account;
};
#endif
// vim: set noet ts=4 sts=4 sw=4: