Home · All Classes · All Namespaces · Modules · Functions · Files

account.h

00001 /*
00002  * This file is part of TelepathyQt4
00003  *
00004  * Copyright (C) 2008 Collabora Ltd. <http://www.collabora.co.uk/>
00005  * Copyright (C) 2008 Nokia Corporation
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with this library; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020  */
00021 
00022 #ifndef _TelepathyQt4_account_h_HEADER_GUARD_
00023 #define _TelepathyQt4_account_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TELEPATHY_QT4_HEADER
00026 #error IN_TELEPATHY_QT4_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt4/_gen/cli-account.h>
00030 
00031 #include <TelepathyQt4/Connection>
00032 #include <TelepathyQt4/ConnectionFactory>
00033 #include <TelepathyQt4/ContactFactory>
00034 #include <TelepathyQt4/ChannelFactory>
00035 #include <TelepathyQt4/DBus>
00036 #include <TelepathyQt4/DBusProxy>
00037 #include <TelepathyQt4/FileTransferChannelCreationProperties>
00038 #include <TelepathyQt4/OptionalInterfaceFactory>
00039 #include <TelepathyQt4/ReadinessHelper>
00040 #include <TelepathyQt4/ReadyObject>
00041 #include <TelepathyQt4/Types>
00042 #include <TelepathyQt4/Constants>
00043 #include <TelepathyQt4/SharedPtr>
00044 
00045 #include <QSet>
00046 #include <QString>
00047 #include <QStringList>
00048 #include <QVariantMap>
00049 
00050 namespace Tp
00051 {
00052 
00053 class Account;
00054 class Connection;
00055 class PendingChannelRequest;
00056 class PendingConnection;
00057 class PendingOperation;
00058 class PendingReady;
00059 class PendingStringList;
00060 class ProtocolInfo;
00061 
00062 class TELEPATHY_QT4_EXPORT Account : public StatelessDBusProxy,
00063                 public OptionalInterfaceFactory<Account>,
00064                 public ReadyObject,
00065                 public RefCounted
00066 
00067 {
00068     Q_OBJECT
00069     Q_DISABLE_COPY(Account)
00070     Q_PROPERTY(bool valid READ isValidAccount NOTIFY validityChanged)
00071     Q_PROPERTY(bool enabled READ isEnabled NOTIFY stateChanged)
00072     Q_PROPERTY(QString cmName READ cmName)
00073     Q_PROPERTY(QString protocolName READ protocolName)
00074     Q_PROPERTY(QString serviceName READ serviceName NOTIFY serviceNameChanged)
00075     Q_PROPERTY(ProfilePtr profile READ profile NOTIFY profileChanged)
00076     Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged)
00077     Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged)
00078     Q_PROPERTY(QString nickname READ nickname NOTIFY nicknameChanged)
00079     Q_PROPERTY(Avatar avatar READ avatar NOTIFY avatarChanged)
00080     Q_PROPERTY(QVariantMap parameters READ parameters NOTIFY parametersChanged)
00081     Q_PROPERTY(ProtocolInfo* protocolInfo READ protocolInfo)
00082     Q_PROPERTY(ConnectionCapabilities* capabilities READ capabilities NOTIFY capabilitiesChanged)
00083     Q_PROPERTY(bool hasBeenOnline READ hasBeenOnline)
00084     Q_PROPERTY(bool connectsAutomatically READ connectsAutomatically NOTIFY connectsAutomaticallyPropertyChanged)
00085     // FIXME: (API/ABI break) Use Connection::Status
00086     Q_PROPERTY(ConnectionStatus connectionStatus READ connectionStatus)
00087     Q_PROPERTY(ConnectionStatusReason connectionStatusReason READ connectionStatusReason)
00088     Q_PROPERTY(QString connectionError READ connectionError)
00089     // FIXME: (API/ABI break) Use Connection::ErrorDetails
00090     Q_PROPERTY(QVariantMap connectionErrorDetails READ connectionErrorDetails)
00091     Q_PROPERTY(bool haveConnection READ haveConnection NOTIFY haveConnectionChanged)
00092     Q_PROPERTY(ConnectionPtr connection READ connection)
00093     Q_PROPERTY(bool changingPresence READ isChangingPresence NOTIFY changingPresence)
00094     Q_PROPERTY(SimplePresence automaticPresence READ automaticPresence NOTIFY automaticPresenceChanged)
00095     Q_PROPERTY(SimplePresence currentPresence READ currentPresence NOTIFY currentPresenceChanged)
00096     Q_PROPERTY(SimplePresence requestedPresence READ requestedPresence NOTIFY requestedPresenceChanged)
00097     Q_PROPERTY(bool online READ isOnline NOTIFY onlinenessChanged)
00098     Q_PROPERTY(QString uniqueIdentifier READ uniqueIdentifier)
00099     // FIXME: (API/ABI break) Remove connectionObjectPath
00100     Q_PROPERTY(QString connectionObjectPath READ _deprecated_connectionObjectPath)
00101     Q_PROPERTY(QString normalizedName READ normalizedName NOTIFY normalizedNameChanged)
00102 
00103 public:
00104     static const Feature FeatureCore;
00105     static const Feature FeatureAvatar;
00106     static const Feature FeatureProtocolInfo;
00107     static const Feature FeatureCapabilities;
00108     static const Feature FeatureProfile;
00109 
00110     // FIXME: (API/ABI break) Remove both constructors that don't take factories as params.
00111     static AccountPtr create(const QString &busName,
00112             const QString &objectPath);
00113     TELEPATHY_QT4_DEPRECATED static AccountPtr create(const QDBusConnection &bus,
00114             const QString &busName, const QString &objectPath);
00115 
00116     // FIXME: (API/ABI break) collapse these with the above variants and have all factories be
00117     //        default params for the non-bus version
00118     static AccountPtr create(const QString &busName, const QString &objectPath,
00119             const ConnectionFactoryConstPtr &connectionFactory,
00120             const ChannelFactoryConstPtr &channelFactory =
00121                 ChannelFactory::create(QDBusConnection::sessionBus()),
00122             const ContactFactoryConstPtr &contactFactory =
00123                 ContactFactory::create());
00124     // The bus-taking variant should never have default factories unless the bus is the last param
00125     // which would be illogical?
00126     static AccountPtr create(const QDBusConnection &bus,
00127             const QString &busName, const QString &objectPath,
00128             const ConnectionFactoryConstPtr &connectionFactory,
00129             const ChannelFactoryConstPtr &channelFactory,
00130             const ContactFactoryConstPtr &contactFactory =
00131                 ContactFactory::create());
00132 
00133     virtual ~Account();
00134 
00135     ConnectionFactoryConstPtr connectionFactory() const;
00136     ChannelFactoryConstPtr channelFactory() const;
00137     ContactFactoryConstPtr contactFactory() const;
00138 
00139     bool isValidAccount() const;
00140 
00141     bool isEnabled() const;
00142     PendingOperation *setEnabled(bool value);
00143 
00144     QString cmName() const;
00145 
00146     TELEPATHY_QT4_DEPRECATED QString protocol() const;
00147     QString protocolName() const;
00148 
00149     QString serviceName() const;
00150     PendingOperation *setServiceName(const QString &value);
00151 
00152     ProfilePtr profile() const;
00153 
00154     QString displayName() const;
00155     PendingOperation *setDisplayName(const QString &value);
00156 
00157     TELEPATHY_QT4_DEPRECATED QString icon() const;
00158     QString iconName() const;
00159     TELEPATHY_QT4_DEPRECATED PendingOperation *setIcon(const QString &value);
00160     PendingOperation *setIconName(const QString &value);
00161 
00162     QString nickname() const;
00163     PendingOperation *setNickname(const QString &value);
00164 
00165     // TODO: We probably want to expose the avatar file name once we have the avatar token and MC
00166     //       starts sharing the cache used by tp-qt4 and tp-glib and use Tp::AvatarData to represent
00167     //       it as used in Tp::Contact
00168     const Avatar &avatar() const;
00169     PendingOperation *setAvatar(const Avatar &avatar);
00170 
00171     QVariantMap parameters() const;
00172     PendingStringList *updateParameters(const QVariantMap &set,
00173             const QStringList &unset);
00174 
00175     // FIXME: (API/ABI break) Use ProtocolInfoPtr
00176     ProtocolInfo *protocolInfo() const;
00177 
00178     // FIXME: (API/ABI break) Use ConnectionCapabilitiesPtr
00179     ConnectionCapabilities *capabilities() const;
00180 
00181     bool connectsAutomatically() const;
00182     PendingOperation *setConnectsAutomatically(bool value);
00183 
00184     bool hasBeenOnline() const;
00185 
00186     // FIXME: (API/ABI break) Use Connection::Status
00187     ConnectionStatus connectionStatus() const;
00188     ConnectionStatusReason connectionStatusReason() const;
00189     QString connectionError() const;
00190     // FIXME: (API/ABI break) Use Connection::ErrorDetails
00191     QVariantMap connectionErrorDetails() const;
00192     bool haveConnection() const;
00193     ConnectionPtr connection() const;
00194 
00195     bool isChangingPresence() const;
00196 
00197     SimplePresence automaticPresence() const;
00198     PendingOperation *setAutomaticPresence(
00199             const SimplePresence &value);
00200 
00201     SimplePresence currentPresence() const;
00202 
00203     SimplePresence requestedPresence() const;
00204     PendingOperation *setRequestedPresence(
00205             const SimplePresence &value);
00206 
00207     bool isOnline() const;
00208 
00209     QString uniqueIdentifier() const;
00210 
00211     TELEPATHY_QT4_DEPRECATED QString connectionObjectPath() const;
00212 
00213     QString normalizedName() const;
00214 
00215     PendingOperation *reconnect();
00216 
00217     PendingOperation *remove();
00218 
00219     PendingChannelRequest *ensureTextChat(
00220             const QString &contactIdentifier,
00221             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00222             const QString &preferredHandler = QString());
00223     PendingChannelRequest *ensureTextChat(
00224             const ContactPtr &contact,
00225             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00226             const QString &preferredHandler = QString());
00227 
00228     PendingChannelRequest *ensureTextChatroom(
00229             const QString &roomName,
00230             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00231             const QString &preferredHandler = QString());
00232 
00233     PendingChannelRequest *ensureStreamedMediaCall(
00234             const QString &contactIdentifier,
00235             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00236             const QString &preferredHandler = QString());
00237     PendingChannelRequest *ensureStreamedMediaCall(
00238             const ContactPtr &contact,
00239             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00240             const QString &preferredHandler = QString());
00241 
00242     PendingChannelRequest *ensureStreamedMediaAudioCall(
00243             const QString &contactIdentifier,
00244             QDateTime userActionTime = QDateTime::currentDateTime(),
00245             const QString &preferredHandler = QString());
00246     PendingChannelRequest *ensureStreamedMediaAudioCall(
00247             const ContactPtr &contact,
00248             QDateTime userActionTime = QDateTime::currentDateTime(),
00249             const QString &preferredHandler = QString());
00250 
00251     PendingChannelRequest *ensureStreamedMediaVideoCall(
00252             const QString &contactIdentifier,
00253             bool withAudio = true,
00254             QDateTime userActionTime = QDateTime::currentDateTime(),
00255             const QString &preferredHandler = QString());
00256     PendingChannelRequest *ensureStreamedMediaVideoCall(
00257             const ContactPtr &contact,
00258             bool withAudio = true,
00259             QDateTime userActionTime = QDateTime::currentDateTime(),
00260             const QString &preferredHandler = QString());
00261 
00262     TELEPATHY_QT4_DEPRECATED PendingChannelRequest *ensureMediaCall(
00263             const QString &contactIdentifier,
00264             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00265             const QString &preferredHandler = QString());
00266     TELEPATHY_QT4_DEPRECATED PendingChannelRequest *ensureMediaCall(
00267             const ContactPtr &contact,
00268             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00269             const QString &preferredHandler = QString());
00270 
00271     TELEPATHY_QT4_DEPRECATED PendingChannelRequest *ensureAudioCall(
00272             const QString &contactIdentifier,
00273             QDateTime userActionTime = QDateTime::currentDateTime(),
00274             const QString &preferredHandler = QString());
00275     TELEPATHY_QT4_DEPRECATED PendingChannelRequest *ensureAudioCall(
00276             const ContactPtr &contact,
00277             QDateTime userActionTime = QDateTime::currentDateTime(),
00278             const QString &preferredHandler = QString());
00279 
00280     TELEPATHY_QT4_DEPRECATED PendingChannelRequest *ensureVideoCall(
00281             const QString &contactIdentifier,
00282             bool withAudio = true,
00283             QDateTime userActionTime = QDateTime::currentDateTime(),
00284             const QString &preferredHandler = QString());
00285     TELEPATHY_QT4_DEPRECATED PendingChannelRequest *ensureVideoCall(
00286             const ContactPtr &contact,
00287             bool withAudio = true,
00288             QDateTime userActionTime = QDateTime::currentDateTime(),
00289             const QString &preferredHandler = QString());
00290 
00291     PendingChannelRequest *createFileTransfer(
00292             const QString &contactIdentifier,
00293             const FileTransferChannelCreationProperties &properties,
00294             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00295             const QString &preferredHandler = QString());
00296     PendingChannelRequest *createFileTransfer(
00297             const ContactPtr &contact,
00298             const FileTransferChannelCreationProperties &properties,
00299             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00300             const QString &preferredHandler = QString());
00301 
00302     PendingChannelRequest *createConferenceMediaCall(
00303             const QList<ChannelPtr> &channels,
00304             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00305             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00306             const QString &preferredHandler = QString());
00307     PendingChannelRequest *createConferenceMediaCall(
00308             const QList<ChannelPtr> &channels,
00309             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00310             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00311             const QString &preferredHandler = QString());
00312 
00313     PendingChannelRequest *createConferenceTextChat(
00314             const QList<ChannelPtr> &channels,
00315             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00316             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00317             const QString &preferredHandler = QString());
00318     PendingChannelRequest *createConferenceTextChat(
00319             const QList<ChannelPtr> &channels,
00320             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00321             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00322             const QString &preferredHandler = QString());
00323 
00324     PendingChannelRequest *createConferenceTextChatRoom(
00325             const QString &roomName,
00326             const QList<ChannelPtr> &channels,
00327             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00328             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00329             const QString &preferredHandler = QString());
00330     PendingChannelRequest *createConferenceTextChatRoom(
00331             const QString &roomName,
00332             const QList<ChannelPtr> &channels,
00333             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00334             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00335             const QString &preferredHandler = QString());
00336 
00337     PendingChannelRequest *createContactSearchChannel(
00338             const QString &server = QString(),
00339             uint limit = 0,
00340             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00341             const QString &preferredHandler = QString());
00342 
00343     // advanced
00344     PendingChannelRequest *createChannel(
00345             const QVariantMap &requestedProperties,
00346             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00347             const QString &preferredHandler = QString());
00348     PendingChannelRequest *ensureChannel(
00349             const QVariantMap &requestedProperties,
00350             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00351             const QString &preferredHandler = QString());
00352 
00353     TELEPATHY_QT4_DEPRECATED inline Client::DBus::PropertiesInterface *propertiesInterface() const
00354     {
00355         return optionalInterface<Client::DBus::PropertiesInterface>(BypassInterfaceCheck);
00356     }
00357 
00358     TELEPATHY_QT4_DEPRECATED inline Client::AccountInterfaceAvatarInterface *avatarInterface(
00359             InterfaceSupportedChecking check = CheckInterfaceSupported) const
00360     {
00361         return optionalInterface<Client::AccountInterfaceAvatarInterface>(check);
00362     }
00363 
00364 Q_SIGNALS:
00365     void removed();
00366     void serviceNameChanged(const QString &serviceName);
00367     void profileChanged(const Tp::ProfilePtr &profile);
00368     void displayNameChanged(const QString &displayName);
00369     // FIXME: (API/ABI break) Remove iconChanged in favor of iconNameChanged
00370     void iconChanged(const QString &iconName);
00371     void iconNameChanged(const QString &iconName);
00372     void nicknameChanged(const QString &nickname);
00373     void normalizedNameChanged(const QString &normalizedName);
00374     void validityChanged(bool validity);
00375     void stateChanged(bool state);
00376     void capabilitiesChanged(Tp::ConnectionCapabilities *capabilities);
00377     void connectsAutomaticallyPropertyChanged(bool connectsAutomatically);
00378     void firstOnline();
00379     // FIXME: (API/ABI break) Use high-level class for parameters
00380     void parametersChanged(const QVariantMap &parameters);
00381     void changingPresence(bool value);
00382     // FIXME: (API/ABI break) Remove const
00383     void automaticPresenceChanged(const Tp::SimplePresence &automaticPresence) const;
00384     // FIXME: (API/ABI break) Remove const
00385     void currentPresenceChanged(const Tp::SimplePresence &currentPresence) const;
00386     // FIXME: (API/ABI break) Remove const
00387     void requestedPresenceChanged(const Tp::SimplePresence &requestedPresence) const;
00388     void onlinenessChanged(bool online);
00389     void avatarChanged(const Tp::Avatar &avatar);
00390     void connectionStatusChanged(Tp::Connection::Status status);
00391     // FIXME: (API/ABI break) Remove connectionStatusChanged in favor of connectionStatusChanged
00392     //        taking error and errorDetails as params.
00393     void connectionStatusChanged(Tp::ConnectionStatus status,
00394             Tp::ConnectionStatusReason statusReason);
00395     // FIXME: (API/ABI break) Remove statusChanged in favor of connectionStatusChanged
00396     //        taking error and errorDetails as params.
00397     void statusChanged(Tp::ConnectionStatus status,
00398             Tp::ConnectionStatusReason statusReason,
00399             const QString &error, const QVariantMap &errorDetails);
00400     void connectionChanged(const Tp::ConnectionPtr &connection);
00401     // FIXME: (API/ABI break) Remove haveConnectionChanged in favor of connectionChanged
00402     void haveConnectionChanged(bool haveConnection);
00403 
00404     // TODO: (API/ABI break) Move this to Tp::Object probably
00405     void propertyChanged(const QString &propertyName);
00406 
00407 protected:
00408     TELEPATHY_QT4_DEPRECATED Account(const QString &busName, const QString &objectPath);
00409     TELEPATHY_QT4_DEPRECATED Account(const QDBusConnection &bus,
00410             const QString &busName, const QString &objectPath);
00411     Account(const QDBusConnection &bus,
00412             const QString &busName, const QString &objectPath,
00413             const ConnectionFactoryConstPtr &connectionFactory,
00414             const ChannelFactoryConstPtr &channelFactory,
00415             const ContactFactoryConstPtr &contactFactory);
00416 
00417     Client::AccountInterface *baseInterface() const;
00418 
00419     // FIXME: (API/ABI break) Remove connectNotify
00420     void connectNotify(const char *);
00421 
00422 private Q_SLOTS:
00423     void gotMainProperties(QDBusPendingCallWatcher *);
00424     void gotAvatar(QDBusPendingCallWatcher *);
00425     void onAvatarChanged();
00426     void onConnectionManagerReady(Tp::PendingOperation *);
00427     void onConnectionReady(Tp::PendingOperation *);
00428     void onPropertyChanged(const QVariantMap &delta);
00429     void onRemoved();
00430     void onConnectionBuilt(Tp::PendingOperation *);
00431 
00432 private:
00433     struct Private;
00434     friend struct Private;
00435 
00436     // TODO: (API/ABI break) Move this to Tp::Object probably
00437     void notify(const char *propertyName);
00438 
00439     QString _deprecated_connectionObjectPath() const;
00440 
00441     Private *mPriv;
00442 };
00443 
00444 } // Tp
00445 
00446 #endif


Copyright © 2008-2010 Collabora Ltd. and Nokia Corporation
Telepathy-Qt4 0.3.13