/*
* This file is part of TelepathyQt4
*
* Copyright (C) 2008 Collabora Ltd.
* Copyright (C) 2008 Nokia Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _TelepathyQt4_account_h_HEADER_GUARD_
#define _TelepathyQt4_account_h_HEADER_GUARD_
#ifndef IN_TELEPATHY_QT4_HEADER
#error IN_TELEPATHY_QT4_HEADER
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace Tp
{
class Account;
class Connection;
class PendingChannelRequest;
class PendingConnection;
class PendingOperation;
class PendingReady;
class PendingStringList;
class TELEPATHY_QT4_EXPORT Account : public StatelessDBusProxy,
public OptionalInterfaceFactory
{
Q_OBJECT
Q_DISABLE_COPY(Account)
Q_PROPERTY(bool valid READ isValidAccount NOTIFY validityChanged)
Q_PROPERTY(bool enabled READ isEnabled NOTIFY stateChanged)
Q_PROPERTY(QString cmName READ cmName)
Q_PROPERTY(QString protocolName READ protocolName)
Q_PROPERTY(QString serviceName READ serviceName NOTIFY serviceNameChanged)
Q_PROPERTY(ProfilePtr profile READ profile NOTIFY profileChanged)
Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged)
Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged)
Q_PROPERTY(QString nickname READ nickname NOTIFY nicknameChanged)
Q_PROPERTY(Avatar avatar READ avatar NOTIFY avatarChanged)
Q_PROPERTY(QVariantMap parameters READ parameters NOTIFY parametersChanged)
Q_PROPERTY(ProtocolInfo protocolInfo READ protocolInfo)
Q_PROPERTY(ConnectionCapabilities capabilities READ capabilities NOTIFY capabilitiesChanged)
Q_PROPERTY(bool hasBeenOnline READ hasBeenOnline)
Q_PROPERTY(bool connectsAutomatically READ connectsAutomatically NOTIFY connectsAutomaticallyPropertyChanged)
Q_PROPERTY(ConnectionStatus connectionStatus READ connectionStatus NOTIFY connectionStatusChanged)
Q_PROPERTY(ConnectionStatusReason connectionStatusReason READ connectionStatusReason)
Q_PROPERTY(QString connectionError READ connectionError)
Q_PROPERTY(Tp::Connection::ErrorDetails connectionErrorDetails READ connectionErrorDetails)
Q_PROPERTY(ConnectionPtr connection READ connection NOTIFY connectionChanged)
Q_PROPERTY(bool changingPresence READ isChangingPresence NOTIFY changingPresence)
Q_PROPERTY(Presence automaticPresence READ automaticPresence NOTIFY automaticPresenceChanged)
Q_PROPERTY(Presence currentPresence READ currentPresence NOTIFY currentPresenceChanged)
Q_PROPERTY(Presence requestedPresence READ requestedPresence NOTIFY requestedPresenceChanged)
Q_PROPERTY(bool online READ isOnline NOTIFY onlinenessChanged)
Q_PROPERTY(QString uniqueIdentifier READ uniqueIdentifier)
Q_PROPERTY(QString normalizedName READ normalizedName NOTIFY normalizedNameChanged)
public:
static const Feature FeatureCore;
static const Feature FeatureAvatar;
static const Feature FeatureProtocolInfo;
static const Feature FeatureCapabilities;
static const Feature FeatureProfile;
static AccountPtr create(const QString &busName, const QString &objectPath,
const ConnectionFactoryConstPtr &connectionFactory =
ConnectionFactory::create(QDBusConnection::sessionBus()),
const ChannelFactoryConstPtr &channelFactory =
ChannelFactory::create(QDBusConnection::sessionBus()),
const ContactFactoryConstPtr &contactFactory =
ContactFactory::create());
static AccountPtr create(const QDBusConnection &bus,
const QString &busName, const QString &objectPath,
const ConnectionFactoryConstPtr &connectionFactory,
const ChannelFactoryConstPtr &channelFactory,
const ContactFactoryConstPtr &contactFactory =
ContactFactory::create());
virtual ~Account();
ConnectionFactoryConstPtr connectionFactory() const;
ChannelFactoryConstPtr channelFactory() const;
ContactFactoryConstPtr contactFactory() const;
bool isValidAccount() const;
bool isEnabled() const;
PendingOperation *setEnabled(bool value);
QString cmName() const;
QString protocolName() const;
QString serviceName() const;
PendingOperation *setServiceName(const QString &value);
ProfilePtr profile() const;
QString displayName() const;
PendingOperation *setDisplayName(const QString &value);
QString iconName() const;
PendingOperation *setIconName(const QString &value);
QString nickname() const;
PendingOperation *setNickname(const QString &value);
// TODO: We probably want to expose the avatar file name once we have the avatar token and MC
// starts sharing the cache used by tp-qt4 and tp-glib and use Tp::AvatarData to represent
// it as used in Tp::Contact
const Avatar &avatar() const;
PendingOperation *setAvatar(const Avatar &avatar);
QVariantMap parameters() const;
PendingStringList *updateParameters(const QVariantMap &set,
const QStringList &unset);
ProtocolInfo protocolInfo() const;
ConnectionCapabilities capabilities() const;
bool connectsAutomatically() const;
PendingOperation *setConnectsAutomatically(bool value);
bool hasBeenOnline() const;
ConnectionStatus connectionStatus() const;
ConnectionStatusReason connectionStatusReason() const;
QString connectionError() const;
Connection::ErrorDetails connectionErrorDetails() const;
ConnectionPtr connection() const;
bool isChangingPresence() const;
// TODO: Add overload methods to set presence from a Profile::Presence
// TODO: Add usablePresences() that would return a list of presences that could be set on the
// account
Presence automaticPresence() const;
PendingOperation *setAutomaticPresence(const Presence &presence);
Presence currentPresence() const;
Presence requestedPresence() const;
PendingOperation *setRequestedPresence(const Presence &presence);
bool isOnline() const;
QString uniqueIdentifier() const;
QString normalizedName() const;
PendingOperation *reconnect();
PendingOperation *remove();
PendingChannelRequest *ensureTextChat(
const QString &contactIdentifier,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureTextChat(
const ContactPtr &contact,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureTextChatroom(
const QString &roomName,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureStreamedMediaCall(
const QString &contactIdentifier,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureStreamedMediaCall(
const ContactPtr &contact,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureStreamedMediaAudioCall(
const QString &contactIdentifier,
QDateTime userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureStreamedMediaAudioCall(
const ContactPtr &contact,
QDateTime userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureStreamedMediaVideoCall(
const QString &contactIdentifier,
bool withAudio = true,
QDateTime userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureStreamedMediaVideoCall(
const ContactPtr &contact,
bool withAudio = true,
QDateTime userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createFileTransfer(
const QString &contactIdentifier,
const FileTransferChannelCreationProperties &properties,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createFileTransfer(
const ContactPtr &contact,
const FileTransferChannelCreationProperties &properties,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createConferenceStreamedMediaCall(
const QList &channels,
const QStringList &initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createConferenceStreamedMediaCall(
const QList &channels,
const QList &initialInviteeContacts = QList(),
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createConferenceTextChat(
const QList &channels,
const QList &initialInviteeContacts = QList(),
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createConferenceTextChat(
const QList &channels,
const QStringList &initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createConferenceTextChatRoom(
const QString &roomName,
const QList &channels,
const QStringList &initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createConferenceTextChatRoom(
const QString &roomName,
const QList &channels,
const QList &initialInviteeContacts = QList(),
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *createContactSearch(
const QString &server = QString(),
uint limit = 0,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
// advanced
PendingChannelRequest *createChannel(
const QVariantMap &requestedProperties,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
PendingChannelRequest *ensureChannel(
const QVariantMap &requestedProperties,
const QDateTime &userActionTime = QDateTime::currentDateTime(),
const QString &preferredHandler = QString());
Q_SIGNALS:
void removed();
void serviceNameChanged(const QString &serviceName);
void profileChanged(const Tp::ProfilePtr &profile);
void displayNameChanged(const QString &displayName);
void iconNameChanged(const QString &iconName);
void nicknameChanged(const QString &nickname);
void normalizedNameChanged(const QString &normalizedName);
void validityChanged(bool validity);
void stateChanged(bool state);
void capabilitiesChanged(const Tp::ConnectionCapabilities &capabilities);
void connectsAutomaticallyPropertyChanged(bool connectsAutomatically);
void firstOnline();
void parametersChanged(const QVariantMap ¶meters);
void changingPresence(bool value);
void automaticPresenceChanged(const Tp::Presence &automaticPresence);
void currentPresenceChanged(const Tp::Presence ¤tPresence);
void requestedPresenceChanged(const Tp::Presence &requestedPresence);
void onlinenessChanged(bool online);
void avatarChanged(const Tp::Avatar &avatar);
void connectionStatusChanged(Tp::ConnectionStatus status);
void connectionChanged(const Tp::ConnectionPtr &connection);
protected:
Account(const QDBusConnection &bus,
const QString &busName, const QString &objectPath,
const ConnectionFactoryConstPtr &connectionFactory,
const ChannelFactoryConstPtr &channelFactory,
const ContactFactoryConstPtr &contactFactory,
const Feature &coreFeature);
Client::AccountInterface *baseInterface() const;
private Q_SLOTS:
void gotMainProperties(QDBusPendingCallWatcher *);
void gotAvatar(QDBusPendingCallWatcher *);
void onAvatarChanged();
void onConnectionManagerReady(Tp::PendingOperation *);
void onConnectionReady(Tp::PendingOperation *);
void onPropertyChanged(const QVariantMap &delta);
void onRemoved();
void onConnectionBuilt(Tp::PendingOperation *);
private:
struct Private;
friend struct Private;
Private *mPriv;
};
} // Tp
#endif